问题
I have written a view which responds to ajax requests from browser. It's written like so -
@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.
How do i do it?
Here's how I handle the server response on client-side -
$.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>");
}
});
回答1:
render_to_response
is a shortcut specifically for rendering a template. If you don't want to do that, just return an empty HttpResponse
:
from django.http import HttpResponse
return HttpResponse('')
However, in this circumstance I wouldn't do that - you're signalling to the AJAX that there was an error, so you should return an error response, possibly code 400 - which you can do by using HttpResponseBadRequest
instead.
回答2:
I think the best code to return an empty response is 204 No Content
.
from django.http import HttpResponse
return HttpResponse(status=204)
However, in your case, you should not return an empty response, since 204 means: The server *successfully* processed the request and is not returning any content..
It is better returning some 4xx
status code to better signal the error is in the client side. Yo can put any string in the body of the 4xx
response, but I highly recommend you send a JSONResponse
:
from django.http import JsonResponse
return JsonResponse({'error':'something bad'},status=400)
来源:https://stackoverflow.com/questions/4123155/how-do-i-send-empty-response-in-django-without-templates