Как я могу узнать, что 500 ошибка я получаю в Django?

когда я посещаю страницу (http://68.123.151.234/static/quickstart - ... html) в моем приложении Django, обслуживаемом на сервере, порожденном Django, страница читает

A server error occurred.  Please contact the administrator.

и я получаю этот вывод.

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

эта трассировка только говорит мне, что мне нужен шаблон 500 - не то, что фактическая ошибка сервера. Как я могу узнать, что ошибка сервера была?

Я проверил документацию Django (https://docs.djangoproject.com/en/1.4/topics/http/views/), который направляет меня на создание шаблона ошибки 500 в качестве потенциального решения. Однако он не дает никаких инструкций о том, как отобразить ошибку в таком шаблоне.

4 ответов


базовый 500.html, который удобен и полезен, как сказал Аласдэр, потенциально может выявить что-то чувствительное.

однако, если отладка через интернет ответственным образом является целью, основной nondefault500.html шаблон для вашего шаблона сайта dir будет выглядеть как

<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>

и новый обработчик будет заполнять этот контекст как таковой:

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})))

и должна быть произведена корректировка URLconf,

handler500 = 'mysite.views.this_server_error'

Если вы тестируете свой сайт, установите DEBUG=True затем Django покажет трассировку.

после того, как сайт работает, вы, вероятно, не хотите отображать трассировку на странице ошибки, так как она может содержать конфиденциальную информацию.

Если вы добавляете шаблон 500. Затем Django отправит электронное письмо, содержащее трассировку, пользователям, указанным в настройках ADMINS.

посмотреть документы на Сообщение Об Ошибке для получения дополнительной информации.


Я считаю, что вам нужно 500.html шаблон, когда DEBUG установлено значение False.

создайте один и поместите его в каталог шаблонов

он будет показан пользователю всякий раз, когда есть ошибка 500.


TemplateDoesNotExist: 500.html

Я думаю, вы должны создать 500.html в вашем шаблоне dir.