当DEBUG为False时,Django flatpages提升404(存在404和500个模板)

时间:2010-02-27 19:01:37

标签: django django-flatpages http-status-code-404

我正在使用Django 1.1.1稳定版。当DEBUG设置为True Django flatpages正常工作时;当DEBUGFalse时,我尝试访问的每个网页都会引发自定义404错误(我的错误模板显然正常工作)。

在互联网上搜索建议我创建404和500个模板。

我已将FlatpageFallBackMiddleware添加到middleware_classes,并将flatpages添加到已安装的应用程序中。我有什么想法可以让flatpages工作吗?

5 个答案:

答案 0 :(得分:6)

在我发现404视图发送200状态响应之前,我发生了同样的事情。所以你要做的就是在处理404响应的视图中添加它:

def 404_handler(request):    ...

    response = render_to_response('404.html', locals(), context_instance=RequestContext(request))
    response.status_code = 404
    return response

答案 1 :(得分:1)

尝试在FlatpageFallBackMiddleware

之前添加django.middleware.common.CommonMiddleware

并确保您的404.html和500.html存储在模板的根目录(eg: templates/404.html)

答案 2 :(得分:0)

关键是检查中间件的顺序。中间件在 in (请求和视图)中以自上而下的顺序执行,并在 out (响应和异常)的路上以自下而上的顺序执行。因此,如果您要访问404处理程序,那么应该是一个非常合理的平面网址,那么在调用flatpages中间件之前就会抓住404。

答案 3 :(得分:0)

在不同的上下文中有相同的错误。问题是由我从

更改文件urls.py引起的
from django.conf.urls.defaults import *

from django.conf.urls.defaults import include, patterns

pylint建议,但是这省略了handler404和handler500,它们预计会被导入*隐式导入。

所以要么添加要导入的内容,要么只是导入*作为django文档建议解决了这个问题。

答案 4 :(得分:0)

创建一个错误处理视图,打印堆栈跟踪import traceback;traceback.print_exc(),而不是静默忽略错误。