当我像这样覆盖 urls.py 中的 handler404 和 handler500 时:

from myapp.views import not_found_view

handler404 = not_found_view
handler500 = not_found_view

并在我的中间件中调用 raise Http404(),我看到了我的 404 页面。

当我从中间件中的 handler404handler500 中删除 urls.pyraise Http404() 时,我看到了默认的 500 错误页面(来自 Django Suit)——因此我试图设置一个自定义 404 模板以用于 raise Http404() 的。

现在我的问题是:当我删除 handler500 并且 只设置 handler404 时,我还会看到一个 HTTP 500 页面! :|

为什么当我 handler500 时调用我的 raise Http404()

我在多个应用程序中有多个模板目录,我尝试在包含设置的主应用程序和另一个“普通”应用程序中放置一个 404.html,但没有用。

我也将 DEBUG 设置为 False

希望有人能回答我的问题!

最佳答案

如果您只想替换 Django 的模板,则不必编写自己的处理程序。 Django 使用 404.html500.html 文件作为模板,您可以将它们替换为将同名文件放到 settings.TEMPLATE_DIRS 中列出的目录中。

在您的示例中,这意味着您可以创建 myapp/templates/404.htmlmyapp/templates/500.html 文件。

请注意,您必须将 DEBUG 设置为 False 以设置这些模板。

检查 this article 了解更多详情。

关于python - 在引发 Http404() 时未调用 Django handler404,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29719679/

10-11 09:03