Подтвердить что ты не робот

Как отправить пустой ответ в 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>");
        }
    });
4b9b3361

Ответ 1

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

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

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

Ответ 2

Я думаю, что лучший код для возврата пустого ответа - 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)