web-dev-qa-db-ja.com

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>");
        }
    });
44

render_to_responseは、テンプレートのレンダリング専用のショートカットです。そうしたくない場合は、空のHttpResponseを返すだけです:

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

ただし、この状況では私はそれを行いません-エラーがあったことをAJAXに通知しているので、おそらくコード400を返す必要があります-これを行うことができます代わりにHttpResponseBadRequestを使用します。

74
Daniel Roseman

空の応答を返すのに最適なコードは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ステータスコードを返すことをお勧めします。 Yoは4xx応答の本文に任意の文字列を挿入できますが、JSONResponseを送信することを強くお勧めします。

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