2013-03-01 14 views

Odpowiedz

19

Nieważne, zapomniałem spróbować tego:

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

wydaje się takie proste, to prawdopodobnie nie zasługują na pytanie na StackOverflow.

+2

To nie wydaje się działać dla nas. Otrzymuję "ContentNotRenderedError: Treść odpowiedzi musi zostać wyrenderowana, zanim będzie można ją powtórzyć." –

+1

@NicolasBouliane Mam ten sam błąd. Udało ci się to naprawić? – Depado

+1

Po prostu wywołaj na nim '.render()'. –

2

udało się działać poprzez następujący kod w moim zwyczaju 404 CBV (znaleziono go na innym stanowisku StackOverflow: Django handler500 as a Class Based View)

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 

W moim pliku korzeń URLconf Mam następujący:

from apps.errors.views.notfound import NotFoundView 

handler404 = NotFoundView.get_rendered_view() 
+0

Ostrożnie, powinieneś zwracać status 404, a nie tylko wyświetlać szablon podobny do tego. Powinieneś dodać 'response.status_code = 404'. – guival

Powiązane problemy