可以让多个应用程序在 Django 中处理 404 错误吗?

发布于 2024-07-18 06:54:44 字数 153 浏览 7 评论 0原文

显然,Django 平面页面的工作方式是处理其他应用程序抛出的 404。 我想知道我是否可以做另一个 flatpages 类型的应用程序,在 flatpages 之前获得 404 的破解。 到目前为止我尝试过但没有成功。 模板已渲染,但数据未通过。

有可能吗?

Apparently, the way Django flatpages works is that it handles the 404 thrown by other apps. I was wondering if I could do another flatpages-type app that gets a crack at the 404 before flatpages does. I tried this without success so far. A template gets rendered but the data doesn't come through.

Is it even possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

腹黑女流氓 2024-07-25 06:54:44

根据 Django 文档,您可以将自己的视图指定为 404 或 500 处理程序:

handler404 = 'mysite.views.my_custom_404_view'

因此,您的应用程序可以在 views.py 中定义自定义错误处理视图,您可以将其设置为 404 的处理程序或 urls.py 中的 500 个视图

请参阅“自定义错误视图" 了解更多信息。

As per the Django docs, you can specify your own view as a 404 or 500 handler:

handler404 = 'mysite.views.my_custom_404_view'

So, your app can define a custom error handling view in views.py that you can setup as the handler for 404 or 500 view in your urls.py

See "Customizing Error views" for more info.

萌能量女王 2024-07-25 06:54:44

内置的 Flatpages 应用程序的工作方式是与 一些中间件:中间件有一个名为“process_response”的函数,用于检查传出响应的 404 状态代码。 如果响应是 404,并且 URL 与平面页面匹配,则中间件会抑制 404 并返回呈现的平面页面。

您可以使用自己的中间件做同样的事情。 为了确保您的代码在 Flatpages 代码之前被调用,您的中间件应该位于 MIDDLEWARE_CLASSES 设置中的 Flatpages 之后

# in settings.py
MIDDLEWARE_CLASSES = (
    # ...
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'myapp.middleware.MyMiddlewareClass',
)

它位于之后而不是之前的原因是因为响应阶段 Django 以相反的顺序应用中间件。

The way the built-in flatpages app works is with some middleware: the middleware has a function called 'process_response' that checks outgoing responses for the 404 status code. If the response is a 404, and the URL matches a flatpage, the middleware suppresses the 404 and returns the rendered flatpage.

You can do the same thing with your own middleware. To make sure that your code is called before the flatpages code, your middleware should come after flatpages in your MIDDLEWARE_CLASSES setting:

# in settings.py
MIDDLEWARE_CLASSES = (
    # ...
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'myapp.middleware.MyMiddlewareClass',
)

The reason it's after, and not before, is because during the response phase Django applies middleware in reverse order.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文