500.html而不是404.html

时间:2011-03-02 12:19:44

标签: django django-templates

我有管理面板和direct_to_template主页的基本应用程序。当我输入与url不匹配的url时,我收到404错误,但是当我将DEBUG设置为false时,我收到500.html而不是404.html。知道为什么吗?

5 个答案:

答案 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