2013-03-01 24 views
9

は、root urls.pyでこれを行うことにより、デフォルトの404ページを上書きすることができます。クラスベースのビューを使用してDjangoのカスタム404ビューを指定する方法は?ジャンゴを使用して

handler404 = 'path.to.views.custom404' 

クラスベースのビューを使用している場合、これを行うには?私はそれを理解することはできませんし、ドキュメントは何も言わないようです。

私が試した:

handler404 = 'path.to.view.Custom404.as_view' 

答えて

19

気にしないで、私はこれをしようとするのを忘れ:

from path.to.view import Custom404 
handler404 = Custom404.as_view() 

は今とても簡単だが、それはおそらくStackOverflowの上の質問に値しません。

+2

それは私たちにとってはうまくいかないようです。 'ContentNotRenderedError:応答コンテンツをレンダリングしてから反復処理する必要があります。 ' –

+1

@NicolasBouliane私は同じエラーがあります。あなたはこれを修正することができましたか? – Depado

+1

'.render()'と呼ぶだけです。 –

2
私のカスタム404 CBVに次のコードを持っていることによってそれを動作させるために管理

は(他のStackOverflowのポストにそれを見つけた:Django handler500 as a Class Based View)私は、次のしている私のルートURLconfのファイルで

from django.views.generic import TemplateView 


class NotFoundView(TemplateView): 
    template_name = "errors/404.html" 

    @classmethod 
    def get_rendered_view(cls): 
     as_view_fn = cls.as_view() 

     def view_fn(request): 
      response = as_view_fn(request) 
      # this is what was missing before 
      response.render() 
      return response 

     return view_fn 

from apps.errors.views.notfound import NotFoundView 

handler404 = NotFoundView.get_rendered_view() 
+0

注意:テンプレートのように見えるだけでなく、404状態を返すようにしてください。 'response.status_code = 404'を追加してください。 – guival

関連する問題