Hay otra manera. El código en page_not_found
usa RequestContext
; eso significa que tiene acceso a todas las variables definidas por todos los procesadores de contexto definidos en la entrada TEMPLATE_CONTEXT_PROCESSORS
en settings.py
. El valor predeterminado incluye, entre otros, los marcos django .
Por lo tanto, defina el mensaje que desea mostrar usando messages.error
, por ejemplo, y muestre el mensaje en la plantilla utilizando la variable messages
.
En otras palabras, usted puede escribir su vista como esta:
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()),
)
En su plantilla 404.html, usted debe escribir algo como:
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li>{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
Es un poco más complejo, pero Tiene la ventaja de que puede enviar varios mensajes e incluso utilizar diferentes tipos de mensajes (Advertencia, Depuración, Información, Error, etc.). Puede leer más sobre el marco de trabajo de django aquí: The messages framework | Django Documentation.
tiene que encuentre el camino de conseguir "esto es un error" mensaje en la costumbre ¿Controlador 404? @Alasdair, nbv4 realmente le pediré ayuda. – marianobianchi
@marianobianchi Dije erróneamente que sería posible usar un controlador 404 personalizado para lograr esto, pero en realidad no es posible. Hubo una [solicitud de extracción] (https://github.com/django/django/pull/1397) para un cambio requerido, pero fue rechazada. Después de pensarlo, estoy de acuerdo con la decisión. Creo que es mejor usar el marco de mensajes como lo sugiere Euribates, o presentar una plantilla personalizada y devolver el estado 404. Si incluye los mensajes de excepción en la plantilla 404 predeterminada, existe el riesgo de que muestre mensajes de error inadecuados a los usuarios finales. – Alasdair