Esta es una mejora en la respuesta de Yuji, que proporciona una stacktrace, más instrucciones (para nosotros los django novatos) y es más simple.
Ponga este código en un archivo en algún lugar de su aplicación, p. PROJECT_ROOT/MAIN_APP/middleware/exceptions.py
, y asegúrese de tener un __init__.py
vacío en el mismo directorio.
import traceback
from django.http import HttpResponse
class PlainExceptionsMiddleware(object):
def process_exception(self, request, exception):
return HttpResponse(traceback.format_exc(exception), content_type="text/plain", status=500)
Ahora editar su settings.py
y encontrar MIDDLEWARE_CLASSES = (
. Agregue otra entrada para que sea así:
MIDDLEWARE_CLASSES = (
# (all the previous entries)
# Plain text exception pages.
'MAIN_APP.middleware.exceptions.PlainExceptionsMiddleware',
)
¡Reinicie django y listo!
Formateo compatible con el agente de usuario.
Si es como yo y está desarrollando una aplicación y un sitio web respaldados por django, es probable que desee mostrar páginas de error de texto sin formato a la aplicación y las más agradables al navegador. Una forma sencilla de a que es comprobar el agente de usuario:
import traceback
from django.http import HttpResponse
class PlainExceptionsMiddleware(object):
def process_exception(self, request, exception):
if "HTTP_USER_AGENT" in request.META and "chrome" in request.META["HTTP_USER_AGENT"].lower():
return
return HttpResponse(traceback.format_exc(exception), content_type="text/plain", status=500)
Esto funciona, gracias. El problema ahora es acceder al seguimiento de la pila, porque "excepción" es solo un objeto de Excepción regular. – simao
¡Felicitaciones! Mire en 'sys.exc_info()' para obtener acceso al traceback. Sugiero mirar directamente el código de django que hace el formateo de traceback normalmente en 'django.core.handlers.base' para implementar su propia versión. –
Sí, eso funciona. Gracias. – simao