4

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

raise Http404

DEBUG=FalseDjango 呈现模板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在每个 URL 上我都会得到 500。虽然DEBUG=True这不会发生。怎么可能??它应该运行相同。我开始认为这是一个 Django 错误。

4

1 回答 1

4

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

请参阅:设置 DEBUG = False 导致 500 错误

这是 django 1.5 中的新功能

生产中需要 ALLOWED_HOSTS

新的 ALLOWED_HOSTS 设置验证请求的 Host 标头并防止主机中毒攻击。现在,只要 DEBUG 为 False,就需要此设置,否则 django.http.HttpRequest.get_host() 将引发 SuspiciousOperation。有关更多详细信息,请参阅新设置的完整文档。

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

于 2013-06-30T09:32:25.857 回答