如何在Django中不使用模板发送空响应
我写了一个视图,用来响应浏览器发来的ajax请求。它是这样写的 -
@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.
我该怎么做呢?
下面是我在客户端处理服务器响应的方式 -
$.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>");
}
});
2 个回答
59
我觉得返回一个空响应的最好方式是 204 No Content
。
from django.http import HttpResponse
return HttpResponse(status=204)
不过,在你的情况下,不应该返回空响应,因为204的意思是:服务器成功处理了请求,但不返回任何内容。
。
更好的做法是返回一些 4xx
状态码,这样可以更清楚地表示错误是在客户端这边。你可以在 4xx
响应的主体中放任何字符串,但我强烈建议你发送一个 JSONResponse
:
from django.http import JsonResponse
return JsonResponse({'error':'something bad'},status=400)
104
render_to_response
是一个专门用来渲染模板的快捷方式。如果你不想这样做,可以直接返回一个空的 HttpResponse
。
from django.http import HttpResponse
return HttpResponse('')
不过,在这种情况下我不建议这样做——因为你是在告诉AJAX发生了错误,所以应该返回一个错误的响应,可能是代码400——你可以用 HttpResponseBadRequest
来实现这一点。