J'ai écrit une vue qui répond aux demandes ajax du navigateur. C'est écrit comme ça -
@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.
Comment fait-on ça?
Voici comment je gère la réponse du serveur côté client -
$.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>");
}
});
render_to_response
est un raccourci spécialement conçu pour le rendu d'un modèle. Si vous ne voulez pas faire cela, renvoyez simplement un HttpResponse
vide:
from Django.http import HttpResponse
return HttpResponse('')
Cependant, dans ce cas, je ne ferais pas cela - vous signalez au AJAX qu'il y a eu une erreur, vous devez donc renvoyer une réponse d'erreur, éventuellement le code 400 - que vous pouvez faire en utilisant HttpResponseBadRequest
à la place.
Je pense que le meilleur code pour renvoyer une réponse vide est 204 No Content
.
from Django.http import HttpResponse
return HttpResponse(status=204)
Cependant, dans votre cas, vous ne devez pas retourner une réponse vide, car 204 signifie: The server *successfully* processed the request and is not returning any content.
.
Il vaut mieux en retourner 4xx
le code d'état pour mieux signaler l'erreur est côté client . Vous pouvez mettre n'importe quelle chaîne dans le corps du 4xx
réponse, mais je vous recommande fortement d'envoyer un JSONResponse
:
from Django.http import JsonResponse
return JsonResponse({'error':'something bad'},status=400)