2010-11-08 20 views
33

He escrito una vista que responde a las solicitudes ajax del navegador. Está escrito como tal -Cómo envío una respuesta vacía en Django sin plantillas

@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?

Aquí es cómo manejar 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>"); 
     } 
    }); 

Respuesta

58

render_to_response es un acceso directo específicamente para la prestación de una plantilla. Si no quieres hacer eso, simplemente devolver un vacío HttpResponse:

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

Sin embargo, en esta circunstancia no haría eso - que está indicando al AJAX que hubo un error, por lo que debería devolver una respuesta de error, posiblemente el código 400, que puede hacer utilizando HttpResponseBadRequest en su lugar.

+0

oh cool! ¡simple, entonces mi problema resultó ser bastante básico! De todos modos, gracias por la ayuda. aprendí algo nuevo hoy. –

9

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 se debe devolver una respuesta vacía, ya que 204 medios: 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 es in the client side. Puedes poner cualquier cadena en el cuerpo de la respuesta 4xx, pero recomiendo encarecidamente enviar un JSONResponse:

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