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

66 投票
2 回答
67113 浏览
提问于 2025-04-16 06:44

我写了一个视图,用来响应浏览器发来的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 来实现这一点。

撰写回答