2016-11-07 15 views
0

我々は最近、Djangoの1.10にアップグレードしたら、我々はライブサイトでこのエラーを取得している:Djangoのカスタム404ハンドラ

組み込みコマンド:例外TypeErrorのcustom_404は()予期しないキーワード引数「例外」を得た

コードは以下の通りである:

urls.py

urlpatterns = [ ... ] 
handler404 = global_views.custom_404 
handler500 = global_views.custom_500 

global_views.py

def custom_404(request, exception, template_name='404.html'): 
    return page_not_found(request, exception, template_name=template_name) 

def custom_500(request, template_name='500.html'): 
    return server_error(request, template_name=template_name) 

このビューでは多くのバリエーションを試しましたが、そのすべてがエラーになります。

どうなりますか?

+0

サーバーが数回更新され、再起動されました。問題は当社のソフトウェア分析ツール(NewRelic)に現れています。私はそれがクライアントが遭遇している問題ではないと思っています。ちょうどバックエンドで起こっていることです。何が起こっているのかを知る必要があるだけです! – zubhav

+0

私はあなたのエラーを再現できません。関数を直接テストするためにurl.pyに 'url(r '^ test404 /'、global_views.custom_404)'を追加してそれらの関数を試してみましたか? –

答えて

1

server_errorビューでは、exceptionを引数として使用しないでください。その署名は、あなたが行うすべての呼び出しpage_not_foundある場合は、custom_404ビューを定義した理由は明らかではない

defaults.server_error(request, template_name='500.html') 

です。 をcustom_500に呼び出すのは非常に奇妙です。

+0

私は、例のためにcustom_500ビューとしてcustom_404ビューを貼り付けました。私の悪い、それを編集します... 私は自分の404のカスタムテンプレートを使用すると、アプリに応じて別のエラーテンプレートを表示することはありません。 – zubhav

+0

404テンプレートをカスタマイズするには、テンプレートに '404.html'という名前を付けます。あなたの質問から、あなたはカスタム404ハンドラが必要なようには見えません。あなたが掲示したコードはそのエラーを引き起こすべきではありません。たぶん、完全なトレースバックにもっと有用な情報があります。 – Alasdair

+0

ありがとうございます。はるかに簡単な解決策は、ハンドラを削除し、Djangoに404.htmlファイルを取得させることでした。しかし、私は別の404ページが好きな3種類のアプリを持っています。アプリケーションのテンプレートフォルダに404.htmlを挿入することは、そのトリックを行うようには見えません。それは404.htmlファイルをルートテンプレートフォルダからレンダリングします。これについてのアイデアは? – zubhav

関連する問題