2009-04-28 45 views
2

显然,Django flatpages工作的方式是处理其他应用程序抛出的404。我想知道如果我能做另一个flatpage类型的应用程序,它会在404页面之前获得破解。到目前为止,我尝试过这种方法,但没有成功一个模板被渲染,但数据不通过。你可以有多个应用程序处理Django中的404吗?

这有可能吗?

回答

3

按照Django文档,你可以指定自己的看法为404或500处理器:

handler404 = 'mysite.views.my_custom_404_view' 

所以,你的应用程序可以在views.py定义自定义错误处理观点,你可以设置为处理程序在您的404或500视图中urls.py

有关详细信息,请参阅“Customizing Error views”。

+0

只有当我把handler404放在我的主要urls.py中时才有效。如果我有多个应用程序,并且每个应用程序应该有自己的处理程序404,那该怎么办web-gui应用程序一个不错的html页面和rest-api一个json响应? – Florian 2013-03-13 22:31:45

1

内置的flatpages应用程序的工作方式是some middleware:中间件有一个名为'process_response'的函数,用于检查404状态代码的传出响应。如果响应是404,并且URL与flatpage匹配,那么中间件会抑制404并返回呈现的flatpage。

你可以用你自己的中间件做同样的事情。因为在响应阶段的Django适用

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

它之后,而不是之前,就是这个道理:要确保你的代码是的flatpages代码调用之前,您的中间件应该在MIDDLEWARE_CLASSES设置来的flatpages中间件以相反的顺序。

+0

感谢您的建议。这对中间件订单很有意思。我尝试颠倒这个顺序,但是对我而言这并没有什么不同。 – rick 2009-04-28 23:07:24

相关问题