Le projet sur lequel je travaille contient des données qui doivent être transmises à chaque vue. Nous avons donc un wrapper autour de render_to_response
appelé master_rtr
. D'accord.Django: gestionnaire 404 personnalisé qui renvoie le code d'état 404
Maintenant, j'ai besoin de nos 404 pages pour les parcourir également. Pour the instructions, j'ai créé un gestionnaire personnalisé 404 (habilement appelé custom_404
) qui appelle master_rtr. Tout a l'air bien, mais nos tests échouent, car nous recevons un 200 OK. Donc, j'essaie de comprendre comment renvoyer un code d'état 404 à la place. Il ya seems to be une classe HttpResponseNotFound qui est un peu ce que je veux, mais je ne suis pas tout à fait sûr comment construire tout ce non-sens au lieu d'utiliser render_to_response
. Ou plutôt, je pourrais probablement le comprendre, mais il semble que leur doit être un moyen plus facile; y a-t-il?
Les parties appropriées du code:
def master_rtr(request, template, data = {}):
if request.user.is_authenticated():
# Since we're only grabbing the enrollments to get at the courses,
# doing select_related() will save us from having to hit database for
# every course the user is enrolled in
data['courses'] = \
[e.course for e in \
Enrollment.objects.select_related().filter(user=request.user) \
if e.view]
else:
if "anonCourses" in request.session:
data['courses'] = request.session['anonCourses']
else:
data['courses'] = []
data['THEME'] = settings.THEME
return render_to_response(template, data, context_instance=RequestContext(request))
def custom_404(request):
response = master_rtr(request, '404.html')
response.status_code = 404
return response
Ah oui, c'est ce que je cherchais. Mise à jour de la question avec le code. –
Eh bien, on dirait que vous pourriez simplement le faire dans un processeur de contexte (et ensuite l'ajouter au paramètre TEMPLATE_CONTEXT_PROCESSORS). Si vous craignez de perdre le raccourci plus simple qui utilise RequestContext, vous pouvez simplement utiliser django.views.generic.simple.direct_to_template – SmileyChris