在debug=False时,导致Django错误的原因是什么,而在debug=True时又没有此错误?

16 投票
4 回答
10328 浏览
提问于 2025-04-16 11:38

在开发服务器上,无论是设置debug=True还是debug=False,程序都能正常运行。

但是在生产环境中,如果debug设置为True,一切都能正常工作;但如果设置为False,就会出现500错误,并且apache的日志最后显示一个导入错误:“ImportError: cannot import name Project”。

在导入的代码中,没有任何东西是根据debug的状态来决定的——唯一的代码是决定开发服务器是否应该提供静态文件(在生产环境中,这个任务应该由apache来处理,而这部分已经单独测试过,运行得很好)。

4 个回答

1

如果你没有同时准备好500.html和404.html这两个模板,也会出现这种情况。仅仅有500.html是不够的,即使是那些不会产生404错误的链接也一样!

75

我今天遇到了类似的错误,原因是Django 1.5需要在设置中添加ALLOWED_HOSTS这个参数。你只需要加上这一行就可以让它正常工作了;)

...
ALLOWED_HOSTS = '*'
...

不过,要注意,你需要根据实际的主机来正确设置这个参数(https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts)!

这个列表中的值可以是完整的域名(比如 'www.example.com'),这样它们会和请求中的Host头部完全匹配(不区分大小写,不包括端口)。以点开头的值可以用作子域名通配符:'.example.com'可以匹配example.com、www.example.com以及example.com的任何其他子域名。值为'*'会匹配任何东西;在这种情况下,你需要自己验证Host头部(可能在中间件中;如果是这样,这个中间件必须在MIDDLEWARE_CLASSES中排在第一位)。

所以基本上,当你在生产环境中时,最好使用这种配置:

...
ALLOWED_HOSTS = [
    '.yourdomain.com',
]
...

感谢gertvdijk指出这一点

7

这个问题发生在你的文件中有循环导入的情况。你需要检查一下,看看是不是在一个文件里导入了Project,然后又在Project里导入了最开始导入Project的那个文件。

我最近也遇到过这个问题,调整了一下我的导入顺序,结果问题就解决了。

撰写回答