如何在没有模板的情况下在Django中发送空响应

时间:2010-11-08 10:51:28

标签: python ajax django django-views

我编写了一个视图,它响应来自浏览器的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 个答案:

答案 0 :(得分:70)

render_to_response是专门用于呈现模板的快捷方式。如果您不想这样做,只需返回一个空的HttpResponse

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

然而,在这种情况下我不会这样做 - 你向AJAX发出错误信号,所以你应该返回一个错误响应,可能是代码400 - 你可以使用{{1}而不是。

答案 1 :(得分:23)

我认为返回空响应的最佳代码是204 No Content

from django.http import HttpResponse
return HttpResponse(status=204)

但是,在您的情况下,您不应该返回空响应,因为204表示:The server *successfully* processed the request and is not returning any content.

最好返回一些4xx状态代码,以便更好地发出错误信号in the client side。哟可以在4xx回复的正文中添加任何字符串,但强烈建议您发送JSONResponse

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