2012-05-17 12 views
6

Cuando visito una página (http://68.123.151.234/static/quickstart.html) en mi aplicación Django que se presentan en un servidor generado por Django, la página se lee¿Cómo puedo saber qué error de error estoy recibiendo en Django?

A server error occurred. Please contact the administrator. 

y recibo este rastreo.

Traceback (most recent call last): 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run 
    self.result = application(self.environ, self.start_response) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__ 
    response = self.get_response(request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 153, in get_response 
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception 
    return callback(request, **param_dict) 
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 91, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/views/defaults.py", line 32, in server_error 
    t = loader.get_template(template_name) # You need to create a 500.html template. 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 145, in get_template 
    template, origin = find_template(template_name) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 138, in find_template 
    raise TemplateDoesNotExist(name) 
TemplateDoesNotExist: 500.html 
[17/May/2012 11:31:45] "GET /static/quickstart.html HTTP/1.1" 500 59 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run 
    self.result = application(self.environ, self.start_response) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 241, in __call__ 
    response = self.get_response(request) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 153, in get_response 
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info()) 
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 228, in handle_uncaught_exception 
    return callback(request, **param_dict) 
    File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py", line 91, in _wrapped_view 
    response = view_func(request, *args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/django/views/defaults.py", line 32, in server_error 
    t = loader.get_template(template_name) # You need to create a 500.html template. 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 145, in get_template 
    template, origin = find_template(template_name) 
    File "/usr/local/lib/python2.7/dist-packages/django/template/loader.py", line 138, in find_template 
    raise TemplateDoesNotExist(name) 
TemplateDoesNotExist: 500.html 

Este rastreo solo me dice que necesito una plantilla de 500, no cuál es el error real del servidor. ¿Cómo puedo averiguar cuál fue el error del servidor?

Revisé la documentación de Django (https://docs.djangoproject.com/en/1.4/topics/http/views/), lo que me lleva a crear una plantilla de error 500 como posible solución. Sin embargo, no proporciona instrucciones sobre cómo mostrar el error dentro de dicha plantilla.

+1

¿Tu 'DEBUG' está configurado en' True'? Django no mostrará los trazados con 'DEPURAR' establecido en 'Falso'. – dgel

Respuesta

7

Un 500.html básico que es conveniente y útil, como dijo Alasdair, podría revelar algo sensible.

Sin embargo, si la depuración a través de Internet de manera responsable es el objetivo, una plantilla nondefault500.html básico para su sitio plantilla dir se vería como

<html><head><body> 
<!-- starting with sys.exc_info but hey, it's python --> 
Type: {{ type }} <br /> 
Value: {{ value }} <br /> 
Traceback: {{ traceback }} <br /> 
</body></head></html> 

y el nuevo controlador podría llenar ese contexto como tal :

def this_server_error(request, template_name='nondefault500.html'): 
    """ 
    500 error handler. 

    Templates: `500.html` 
    Context: sys.exc_info() results 
    """ 
    t = loader.get_template(template_name) # You need to create a 500.html template. 
    ltype,lvalue,ltraceback = sys.exc_info() 
    sys.exc_clear() #for fun, and to point out I only -think- this hasn't happened at 
        #this point in the process already 
    return http.HttpResponseServerError(t.render(Context({'type':ltype,'value':lvalue,'traceback':ltraceback}))) 

y no tendría que ser un ajuste URLconf hecho,

handler500 = 'mysite.views.this_server_error' 
+0

¡Gracias! Eso hace el truco. – dangerChihuahua007

2

Creo que necesita una plantilla 500.html cuando DEBUG se establece en False.

Crear uno y ponerlo en su directorio de plantillas

Se muestra a un usuario cada vez que hay un error 500.

5

Si está probando su sitio, configure DEBUG=True y luego Django mostrará la trazabilidad.

Una vez que el sitio está activo, es probable que no desee mostrar el rastreo en la página de error, ya que puede contener información confidencial.

Si agrega una plantilla de 500. Django luego enviará un correo electrónico que contiene el rastreo a los usuarios que figuran en la configuración de ADMINS.

Consulte los documentos en Error Reporting para obtener más información.

1
TemplateDoesNotExist: 500.html 

Creo que deberías crear 500.html en tu plantilla dir.

Cuestiones relacionadas