如何为Django的类视图指定自定义404视图?

14 投票
3 回答
7485 浏览
提问于 2025-04-17 17:32

在使用Django的时候,你可以通过在根目录的 urls.py 文件里做一些设置,来替换掉默认的404页面。

handler404 = 'path.to.views.custom404'

那么如果你是用基于类的视图(Class based views),该怎么做呢?我搞不清楚,而且文档里好像也没提到这个。

我试过:

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

3 个回答

1

在你的主 urls.py 文件里,你可以直接添加 from app_name.views import Custom404 这行代码,然后设置 handler404 = Custom404.as_view()。这样就可以正常工作了。

4

我成功让它工作了,方法是在我的自定义404类视图中加入了以下代码(这个方法是在其他StackOverflow帖子中找到的:Django的500错误处理作为类视图

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

在我的根URL配置文件中,我有以下内容:

from apps.errors.views.notfound import NotFoundView

handler404 = NotFoundView.get_rendered_view()
30

没关系,我忘了试这个:

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

现在看起来这么简单,可能根本不值得在StackOverflow上问这个问题。

撰写回答