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