2011-01-06 22 views
9

Mi pregunta es simple, ¿cómo puedo mostrar una página de error personalizada para el estado HTTP 405 (método no permitido) en Django cuando usando el decorador @require_POST?Cómo mostrar una página de error personalizada para el estado HTTP 405 (método no permitido) en Django al utilizar @require_POST

Estoy usando el decorador django.views.decorators.http.require_POST, y cuando la página es visitada por solicitud GET, la consola muestra un error 405, pero la página está en blanco (ni siquiera una página de error de Django). ¿Cómo hago que Django muestre una página de error personalizada y/o predeterminada para este tipo de error?

EDIT: Vale la pena mencionar que he intentado poner una página 404.html, 500.html y 405.html en mi carpeta de plantillas, pero eso tampoco ayuda. También he variado entre DEBUG = True y False, fue en vano.

Respuesta

12

Tienes que escribir middleware Django personalizado. Puede comenzar con éste y extenderlo para comprobar si existe el archivo 405.html y así sucesivamente:

Verificar documentos si no sabe cómo instalar el middleware:

http://docs.djangoproject.com/en/dev/topics/http/middleware/

también se puede consultar este artículo:

http://mitchfournier.com/2010/07/12/show-a-custom-403-forbidden-error-page-in-django/

+0

Gracias - parece tan obvio ahora! Pero un problema mucho más grande de lo que esperaba. –

0

Si observas el documentation y el código fuente de django.views.defaults verás que solo se admiten los errores 404 y 500 de forma que solo tengas que agregar el 404.html resp. 500.html a su directorio de plantillas.

En el documento. También puede leer los siguientes

Devolver los códigos de error HTTP en Django es fácil. Hay subclases de HttpResponse para un número de códigos de estado HTTP comunes que no sean 200 (lo que significa "OK"). Puede encontrar la lista completa de de subclases disponibles en la documentación de solicitud/respuesta.

Así, si usted desea devolver un error 405, usted tiene que utilizar el HttpResponseNotAllowed class

Un example

+0

me temo que no está respondiendo a la pregunta - el problema no se devuelve un estado 405 - el pr oblem muestra una plantilla para esa respuesta mientras usa el decorador @require_POST. –

+0

Tiene razón, se perdió la información que está utilizando el decorador. –

0

No estoy seguro de que eso sea posible. Tal vez deberías considerar la presentación de un informe de error.

+0

Bueno, ahora sabemos que es posible. Pero es cualquier cosa menos tan simple como agregar una página para 404 y 500. Considerando que hay un decorador incorporado para @require_POST, etc., uno esperaría que fuera más fácil. –

Cuestiones relacionadas