Как отправить пустой ответ в Django без шаблонов - PullRequest
43 голосов
/ 08 ноября 2010

Я написал представление, которое отвечает на запросы 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 ]

73 голосов
/ 08 ноября 2010

render_to_response - это ярлык специально для рендеринга шаблона.Если вы не хотите этого делать, просто верните пустое значение HttpResponse:

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

Однако в этом случае я бы этого не сделал - вы даете AJAX сигнал, чтоerror, поэтому вы должны вернуть ответ об ошибке, возможно, код 400 - что можно сделать, используя вместо этого HttpResponseBadRequest.

26 голосов
/ 14 декабря 2016

Я думаю, что лучший код для возврата пустого ответа - 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, чтобы лучше сигнализировать об ошибке на стороне клиента . Вы можете поместить любую строку в тело ответа 4xx, но я настоятельно рекомендую отправить JSONResponse:

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