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