2013-03-01 31 views
9

Sử dụng Django, bạn có thể ghi đè lên các trang mặc định 404 bằng cách làm này trong thư mục gốc urls.py:Cách chỉ định chế độ xem 404 tùy chỉnh cho Django bằng Chế độ xem dựa trên lớp?

handler404 = 'path.to.views.custom404' 

Làm thế nào để làm điều này khi sử dụng xem lớp dựa? Tôi không thể hiểu được và tài liệu dường như không nói gì cả.

Tôi đã thử:

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

Trả lời

19

Không sao, tôi quên thử điều này:

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

Có vẻ đơn giản như vậy bây giờ, nó có lẽ không đáng một câu hỏi về StackOverflow.

+2

Điều đó dường như không hiệu quả đối với chúng tôi. Tôi nhận được 'ContentNotRenderedError: Nội dung phản hồi phải được hiển thị trước khi nó có thể được lặp lại.' –

+1

@NicolasBouliane Tôi có lỗi tương tự. Bạn đã quản lý để sửa lỗi này? – Depado

+1

Chỉ cần gọi '.render()' trên đó. –

2

Managed để làm cho nó hoạt động bằng cách có đoạn mã sau vào tùy chỉnh của tôi 404 CBV (tìm thấy nó trên bài khác 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 

Trong file URLconf gốc của tôi, tôi có như sau:

from apps.errors.views.notfound import NotFoundView 

handler404 = NotFoundView.get_rendered_view() 
+0

Cẩn thận, bạn phải trả lại trạng thái 404, không chỉ hiển thị mẫu giống như nó. Bạn nên thêm 'response.status_code = 404'. – guival

Các vấn đề liên quan