セット付きのdjangoアプリケーションがありhandler500
ます。カスタム例外ハンドラーを追加したいと思います。プロセス例外を処理するミドルウェアを作成します。
ビューで例外が発生すると、Django は process_exception() を呼び出します。process_exception() は None または HttpResponse オブジェクトを返す必要があります。HttpResponse オブジェクトを返す場合、応答はブラウザに返されます。それ以外の場合は、デフォルトの例外処理が開始されます。
https://docs.djangoproject.com/en/dev/topics/http/middleware/?from=olddocs#process-exception
私ErrorMiddleware
のように見えます:
class ErrorMiddleware(object):
def process_exception(self, request, exception):
try:
#logic goes here
except Exception:
pass
return None
私settings
のように見えます:
MIDDLEWARE_CLASSES = (
'my.error.ErrorMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
DEBUG = False
この場合、私のブラウザはページから例外で応答を受け取りません。リストにミドルウェアがなくても、handler500
正しく動作します。
handler500
ミドルウェアでビューを明示的に呼び出さずに、デフォルトの例外処理メカニズムを実行したい。
更新日:
handler500 モジュールは次のようになります。
#imports ....
def custom_500(request):
""" Return an error ID (hash) that can be provided to support """
return render(request, '500.html', {
'timestamp': datetime.datetime.now().isoformat(),
'diagcode': "hello",
}
)