Jest inny sposób. Kod pod numerem page_not_found
używa RequestContext
; oznacza to, że masz dostęp do wszystkich zmiennych zdefiniowanych przez wszystkie procesory kontekstowe zdefiniowane w pozycji TEMPLATE_CONTEXT_PROCESSORS
w settings.py
. Wartość domyślna obejmuje, między innymi, framework django messages.
W ten sposób definiujesz wiadomość, którą chcesz wyświetlić, używając na przykład messages.error
i wyświetlasz wiadomość w szablonie przy użyciu zmiennej messages
.
Innymi słowy, można napisać swój pogląd tak:
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()),
)
w szablonie 404.html, trzeba napisać coś takiego:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
To trochę bardziej skomplikowane, ale ma tę zaletę, że możesz wysyłać kilka wiadomości, a nawet używać różnych rodzajów wiadomości (Ostrzeżenie, Debugowanie, Informacje, Błąd itp.). Możesz przeczytać więcej o strukturze komunikatów django tutaj: The messages framework | Django Documentation.
mają znaleźć sposób na uzyskanie "to błąd" wiadomość w zwyczaju 404 handler? @Alasdair, nbv4 Naprawdę apretiate twojej pomocy. – marianobianchi
@marianobianchi Pomyłkowo powiedziałem, że byłoby możliwe użycie niestandardowego programu obsługi 404, aby to osiągnąć, ale nie jest to faktycznie możliwe. Wystąpiło żądanie pobrania (https://github.com/django/django/pull/1397) dla wymaganej zmiany, ale zostało wyłączone. Po przemyśleniu tego, zgadzam się z decyzją. Myślę, że lepiej jest użyć struktury komunikatów, jak sugeruje program Euribates, lub wyrenderować niestandardowy szablon i zwrócić status 404. Jeśli uwzględnimy komunikaty o wyjątkach w domyślnym szablonie 404, istnieje ryzyko, że użytkownicy będą wyświetlać nieodpowiednie komunikaty o błędach. – Alasdair