Проект, над которым я работаю, содержит некоторые данные, которые необходимо передать каждому виду, поэтому у нас есть обертка вокруг render_to_response
под названием master_rtr
. ОК.Django: пользовательский обработчик 404, который возвращает код состояния 404
Теперь мне нужны наши 404 страницы, чтобы справиться с этим. Per the instructions, я создал пользовательский обработчик 404 (умно называется custom_404
), который вызывает master_rtr. Все выглядит хорошо, но наши тесты терпят неудачу, потому что мы получаем 200 OK.
Итак, я пытаюсь выяснить, как вернуть код статуса 404. Там seems to be класс HttpResponseNotFound, который мне нравится, но я не совсем уверен, как построить всю эту чушь, а не использовать render_to_response
. Скорее всего, я мог бы понять это, но похоже, что они должны быть более простым способом; здесь?
Соответствующие части кода:
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
Ах да, это то, что я искал. Обновлен вопрос с кодом. –
Ну, это определенно похоже, что вы можете просто сделать это в процессоре контекста (а затем добавить его в настройку TEMPLATE_CONTEXT_PROCESSORS). Если вы опасаетесь потерять более простой ярлык, который использует RequestContext, вы можете просто использовать django.views.generic.simple.direct_to_template – SmileyChris