6

当我在由 Django 生成的服务器上提供的 Django 应用程序中访问页面 (http://68.123.151.234/static/quickstart.html) 时,页面显示为

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

4 回答 4

7

正如 Alasdair 所说,一个方便实用的基本 500.html 可能会泄露一些敏感信息。

但是,如果以负责任的方式在 Web 上进行调试是目标,则站点模板目录的基本 nondefault500.html 模板看起来像

<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'
于 2012-05-17T17:28:15.103 回答
5

如果您正在测试您的站点,请设置,DEBUG=True然后 Django 将显示回溯。

一旦站点上线,您可能不想在错误页面上显示回溯,因为它可能包含敏感信息。

如果添加 500 模板。然后,Django 将向 ADMINS 设置中列出的用户发送一封包含回溯的电子邮件。

有关更多信息,请参阅错误报告文档。

于 2012-05-17T16:59:08.123 回答
2

我相信你需要一个 500.html 模板DEBUG设置为False.

创建一个并将其放在您的模板目录中

每当出现 500 错误时,它将显示给用户。

于 2012-05-17T16:58:55.063 回答
1
TemplateDoesNotExist: 500.html

我认为您应该在模板目录中创建 500.html 。

于 2012-05-17T17:08:36.203 回答