当我像这样覆盖 urls.py 中的 handler404 和 handler500 时:
from myapp.views import not_found_view
handler404 = not_found_view
handler500 = not_found_view
并在我的中间件中调用
raise Http404()
,我看到了我的 404 页面。当我从中间件中的
handler404
和 handler500
中删除 urls.py
和 raise Http404()
时,我看到了默认的 500 错误页面(来自 Django Suit)——因此我试图设置一个自定义 404 模板以用于 raise Http404()
的。现在我的问题是:当我删除 handler500 并且 只设置 handler404 时,我还会看到一个 HTTP 500 页面! :|
为什么当我
handler500
时调用我的 raise Http404()
?我在多个应用程序中有多个模板目录,我尝试在包含设置的主应用程序和另一个“普通”应用程序中放置一个
404.html
,但没有用。我也将
DEBUG
设置为 False
。希望有人能回答我的问题!
最佳答案
如果您只想替换 Django 的模板,则不必编写自己的处理程序。 Django 使用 404.html
和 500.html
文件作为模板,您可以将它们替换为将同名文件放到 settings.TEMPLATE_DIRS
中列出的目录中。
在您的示例中,这意味着您可以创建 myapp/templates/404.html
和 myapp/templates/500.html
文件。
请注意,您必须将 DEBUG
设置为 False
以设置这些模板。
检查 this article 了解更多详情。
关于python - 在引发 Http404() 时未调用 Django handler404,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29719679/