3

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

甚至可能吗?

4

2 回答 2

3

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

handler404 = 'mysite.views.my_custom_404_view'

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

有关详细信息,请参阅“自定义错误视图”。

于 2009-04-28T02:55:26.720 回答
1

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

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

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

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

于 2009-04-28T20:02:42.273 回答