500.html而不是404.html

问题描述:

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

当视图函数失败时,Django会提供500,这意味着必须有一些非特定于调试的代码中断。

要告诉的唯一方法是通过服务器日志或django发送到ADMINS列表的电子邮件来查看django是通过哪种方式记录日志。

+0

你说得对,我在404.html有错误。当调试是真的时,它没有出现。非常感谢:) – szaman 2011-03-02 12:30:07

+1

对我来说,这是ALLOWED_HOSTS设置的问题。使用DEBUG = False在localhost:8000上运行站点要求将'*'添加到ALLOWED_HOSTS列表中,否则会出现500错误。请务必记住在部署到生产服务器之前再次取出它。 – 2013-09-01 09:32:26

+0

@Sybren加入'*'解决了我的问题。谢谢! – laike9m 2014-02-11 10:04:05

我还会检查settings.py中的TEMPLATE_DIRS路径,因为这是我的情况中的问题。 Django引发了404错误,但是因为它无法找到404.html(在TEMPLATE_DIRS中指定的路径),所以它引发了500错误 - 找不到模板(当debug为True或服务器日志时,当debug = false时)。

也许有错在你404.html.For比如我用像扩展

{% extends base.html%} 
在我404.html

,标签那么它总是显示“断绝错误500”而不是“网页无法发现404'。 但当我纠正我的错误如下

{% extends "base.html" %} 

一切顺利。

我遇到了同样的问题。我使系统发送错误给我的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。

祝你好运。