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.