Есть другой способ. Код в page_not_found
использует RequestContext
; это означает, что у вас есть доступ ко всем переменным, определенным всеми процессорами контекста, определенными в записи TEMPLATE_CONTEXT_PROCESSORS
в settings.py
. Значение по умолчанию включает, среди прочего, django messages framework.
Итак, вы можете определить сообщение, которое хотите показать, например, с помощью messages.error
, и показать сообщение в шаблоне, используя переменную messages
.
Другими словами, вы можете написать свою точку зрения так:
from django.contrib import messages
from django.http import Http404
from django.template import RequestContext
def my_view(request):
# your code goes here
if something_horribly_wrong_happened():
messages.error(request, 'Somethig horribly wrong happened!')
raise Http404("It doesn't mind whatever you put here")
else:
return render_to_response(
'template.html',
RequestContext(request, locals()),
)
В шаблоне 404.html вы должны написать что-то вроде:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Это немного сложнее, но у него есть то преимущество, что вы можете отправлять несколько сообщений и даже использовать сообщения различного типа (Предупреждение, Отладка, Информация, Ошибка и т. Д.). Вы можете прочитать больше о структуре сообщений django. здесь: Структура сообщений | Документация Django .