update tutorial submissions realpython form and python ajax django django-views

python - tutorial - Cómo envío una respuesta vacía en Django sin plantillas



login ajax django (2)

He escrito una vista que responde a las solicitudes ajax del navegador. Está escrito como tal -

@login_required def no_response(request): params = request.has_key("params") if params: # do processing var = RequestContext(request, {vars}) return render_to_response(''some_template.html'', var) else: #some error # I want to send an empty string so that the # client-side javascript can display some error string. return render_to_response("") #this throws an error without a template.

¿Cómo lo hago?

Así es como manejo la respuesta del servidor en el lado del cliente:

$.ajax ({ type : "GET", url : url_sr, dataType : "html", cache : false, success : function(response) { if(response) $("#resp").html(response); else $("#resp").html("<div id=''no''>No data</div>"); } });


Creo que el mejor código para devolver una respuesta vacía es 204 No Content .

from django.http import HttpResponse return HttpResponse(status=204)

Sin embargo, en su caso, no debe devolver una respuesta vacía, ya que 204 significa: The server *successfully* processed the request and is not returning any content. .

Es mejor devolver algún código de estado 4xx para señalar mejor que el error está en el lado del cliente . Puedes poner cualquier cadena en el cuerpo de la respuesta 4xx , pero te recomiendo que envíes un JSONResponse :

from django.http import JsonResponse return JsonResponse({''error'':''something bad''},status=400)


render_to_response es un atajo específicamente para representar una plantilla. Si no quieres hacer eso, solo devuelve un HttpResponse vacío:

from django.http import HttpResponse return HttpResponse('''')

Sin embargo, en esta circunstancia yo no haría eso, estás señalando al AJAX que hubo un error, por lo que deberías devolver una respuesta de error, posiblemente el código 400, que puedes hacer usando HttpResponseBadRequest lugar.