django 基于类的视图自定义 404 和 500

Posted

技术标签:

【中文标题】django 基于类的视图自定义 404 和 500【英文标题】:django class based view custom 404 and 500 【发布时间】:2013-10-09 05:52:00 【问题描述】:

我正在尝试学习 django,并且我有一个小型测试服务器(不是开发),我正在尝试托管一个小型博客站点(类似于官方教程)。

我想要自定义 404 和 500 视图,所以,我在 urls.py 中有以下内容:

from mystuff.views import Template404View, Template500View
handler404 = Template404View.as_view()
handler500 = Template500View.as_view()

在我的views.py 中,我有以下内容:

class Template404View(TemplateView):
    template_name = "404.html"

class Template500View(TemplateView):
    template_name = "500.html"

404.html500.html 存在于我的 site_templates 目录中。

但是,当我在我的测试服务器上托管它时,我看到的不是 400 或 500 个自定义页面,而是Internal Server Error

我试图在 SO 上查找类似的问题,我看到了 following,但这似乎没有帮助...

任何建议将不胜感激...谢谢。

【问题讨论】:

【参考方案1】:

您正在从 mystuff 导入自定义视图,而它们是在 views.py 中定义的。尝试从我的 stuff.views 导入它们。

同时设置 DEBUG=True 可以给你一些线索

【讨论】:

对不起,我打错了.views - 我现在已经更正了。还没有尝试过 DEBUG=True - 但我想这只会抛出默认的 django 404 - 这不是我想要的。 如果您收到内部服务器错误 (500) 设置 ´DEGUG=True`) 将告诉您有关错误原因的更多信息。可能错误出现在之前的某些导入或类似情况中,因此您无法提供正确的 500.html。【参考方案2】:

我今天遇到了类似的问题:问题是我的 500 页中有德语变音符号,并且在渲染 500 页时,我的 apache 出现了内部服务器错误,因此引发了 apache 200 错误。所以检查你的500页,单独测试一下,看你调用的时候是否正确显示。

但是既然您正在学习教程:为什么不采用Chapter 3 中描述的方法呢?只需编写您的 500.html 文件并将其放入 my_app/templates 中。这很好用,不需要额外的视图或网址。

【讨论】:

以上是关于django 基于类的视图自定义 404 和 500的主要内容,如果未能解决你的问题,请参考以下文章

从 Django 中基于类的通用视图自定义表单变量的首选方法是啥?

如何使用自定义 django 404 错误视图重定向?

带有来自模型的自定义验证消息的 Django 1.5 基于类的视图

Django,当我返回 status_code 404 或 500 时自定义 404/500

在 Django Rest Framework 中找不到资源时返回自定义 404 错误

Django 装饰器。需要帮助以找到基于类的视图的解决方案