显然,Django flatpages 的工作方式是处理其他应用程序抛出的 404。我想知道我是否可以做另一个平面类型的应用程序,在平面页面之前获得 404 的破解。到目前为止,我尝试了这个但没有成功。一个模板被渲染,但数据没有通过。
甚至可能吗?
显然,Django flatpages 的工作方式是处理其他应用程序抛出的 404。我想知道我是否可以做另一个平面类型的应用程序,在平面页面之前获得 404 的破解。到目前为止,我尝试了这个但没有成功。一个模板被渲染,但数据没有通过。
甚至可能吗?
根据 Django 文档,您可以将自己的视图指定为 404 或 500 处理程序:
handler404 = 'mysite.views.my_custom_404_view'
因此,您的应用可以定义一个自定义错误处理视图views.py
,您可以在其中设置为 404 或 500 视图的处理程序urls.py
有关详细信息,请参阅“自定义错误视图”。
内置平面应用程序的工作方式是使用一些中间件:中间件有一个名为“process_response”的函数,用于检查 404 状态代码的传出响应。如果响应是 404,并且 URL 与平面页面匹配,则中间件会抑制 404 并返回呈现的平面页面。
你可以用你自己的中间件做同样的事情。为确保在 flatpages 代码之前调用您的代码,您的中间件应位于设置中的 flatpages之后MIDDLEWARE_CLASSES
:
# in settings.py
MIDDLEWARE_CLASSES = (
# ...
'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
'myapp.middleware.MyMiddlewareClass',
)
它在之后而不是之前的原因是因为在响应阶段 Django 以相反的顺序应用中间件。