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

DEBUGが に設定されている場合は、500.html テンプレートが必要だと思いますFalse

1 つ作成し、テンプレート ディレクトリに配置します。

500 エラーが発生するたびにユーザーに表示されます。

于 2012-05-17T16:58:55.063 に答える
1
TemplateDoesNotExist: 500.html

テンプレートディレクトリに500.htmlを作成する必要があると思います。

于 2012-05-17T17:08:36.203 に答える