我有管理面板和direct_to_template主页的基本应用程序。当我输入与url不匹配的url时,我收到404错误,但是当我将DEBUG设置为false时,我收到500.html而不是404.html。知道为什么吗?
答案 0 :(得分:8)
当视图函数失败时,Django服务500,这意味着必须有一些非调试特定的代码中断。
唯一的方法是查看django通过服务器日志或django发送到ADMINS
列表的电子邮件记录的异常。
答案 1 :(得分:4)
我还会检查settings.py中的TEMPLATE_DIRS路径,因为这是我的问题。 Django引发404错误,但因为它无法找到404.html(在TEMPLATE_DIRS中指定的路径中)所以它引发了500错误 - 找不到模板(当调试为True或服务器日志时,它会显示在浏览器中,当时调试= FALSE)。
答案 2 :(得分:2)
我遇到了同样的问题。我让系统将错误发送到我的gmail:
SuspiciousOperation: Invalid HTTP_HOST header (you may need to set ALLOWED_HOSTS): 127.0.0.1:8000
所以,我在settings.py中添加了这段代码:
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
现在,没关系。我认为当您使DEBUG和TEMPLATE_DEBUG为false时,您必须设置ALLOWED_HOSTS。
祝你好运。答案 3 :(得分:1)
你的404.html可能有问题。例如,我使用像
这样的扩展标记{% extends base.html%}
在我的404.html中,然后它总是显示'严重错误500'而不是'找不到页面404'。 但是当我按照以下方式纠正错误时
{% extends "base.html" %}
一切顺利。
答案 4 :(得分:1)
如果有人遇到这种错误,那么您也可以考虑以这种方式编写视图:
def error_404(request, exception):
data = {"name": "yoursite.com"}
return render(request,'404.html', data)
如果没有exception argument
,那么它将导致error 500
,并且优先执行500.html
。