Django呈现模板`500.html`而不是`404.html`

时间:2013-06-29 16:27:18

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

在我的一个观点中,我有代码:

raise Http404

DEBUG=False Django呈现模板500.html而不是正确的404.html时!我不明白为什么!

编辑:DEBUG=True我得到标准版(由Django编写)

Page not Found (404)
You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

更重要的是,在runserver控制台中,我清楚地看到了404代码。 相反,在控制台中设置DEBUG=False时,我得到500 !!这太奇怪了。

编辑2:如果我在提出Http404之前发出了一份打印声明,我会在DEBUG=True时看到该消息,但在False时却看不到消息!

编辑3:我可以确认,当DEBUG=False语句raise Http404从未到达时。怎么可能?

更新

实际上,每个网址都有DEBUG=False,我得到500.虽然DEBUG=True,但这不会发生。它怎么可能?它应该运行相同。我开始认为这是一个Django错误。

1 个答案:

答案 0 :(得分:4)

debug = false的错误可能是由于allowed_hosts设置造成的。

请参阅:Setting DEBUG = False causes 500 Error

这是django 1.5中的新内容。

  

生产中需要ALLOWED_HOSTS

     

新的ALLOWED_HOSTS设置验证请求的主机头和   防止主机中毒攻击。现在需要此设置   每当DEBUG为False时,或者django.http.HttpRequest.get_host()   将提出SuspiciousOperation。有关详细信息,请参阅完整   新设置的文档。

https://docs.djangoproject.com/en/1.5/releases/1.5/#allowed-hosts-required-in-production