如何在Django中发送空响应而不使用模板?

66

我编写了一个视图,用于响应浏览器的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个回答

102

render_to_response是一个专门用于渲染模板的快捷方式。如果你不想这样做,只需返回一个空的HttpResponse即可:

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

但是,在这种情况下,我不会那样做 - 这会向AJAX信号传递发生错误,因此您应该返回一个错误响应,可能是400代码 - 您可以使用HttpResponseBadRequest来实现。


58

我认为返回空响应的最佳状态码是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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接