当debug = True时,当debug = False时,什么可能导致Django错误

wil*_*low 16 python apache django debugging importerror

使用开发服务器,它可以使用debug = True或False.

在生产中,如果debug = True,一切都有效,但如果debug = False,我得到500错误,apache日志以导入错误结束:"ImportError:无法导入名称Project".

导入中的任何内容都不会以调试为条件 - 唯一的代码是开发服务器是否应该提供静态文件(在生产中,apache应该处理这个 - 并且这是单独测试并且工作正常).

VAS*_*hhh 76

只是说,我今天遇到了类似的错误,这是因为Django 1.5需要ALLOWED_HOSTS设置中的参数.您只需要放置此行以使其工作;)

...
ALLOWED_HOSTS = '*'
...
Run Code Online (Sandbox Code Playgroud)

但是,请注意,您需要根据实际主机(https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts)正确设置此参数!

此列表中的值可以是完全限定名称(例如"www.example.com"),在这种情况下,它们将与请求的主机标头完全匹配(不区分大小写,不包括端口).以句点开头的值可用作子域通配符:'.example.com'将匹配example.com,www.example.com和example.com的任何其他子域.值'*'将匹配任何内容; 在这种情况下,您有责任提供自己的Host头验证(可能在中间件中;如果是这样,则必须首先在MIDDLEWARE_CLASSES中列出此中间件).

所以基本上你最好在生产中使用这种类型的配置:

...
ALLOWED_HOSTS = [
    '.yourdomain.com',
]
...
Run Code Online (Sandbox Code Playgroud)

感谢gertvdijk指出这一点

  • 哇!!问题是真的很老(2年前),你的回答是最近的(6小时前),你让我头疼.谢谢!这是我的upvote :) (5认同)

小智 7

如果您在其中一个文件中进行循环导入,则会发生这种情况.检查并查看是否从Project导入了一些内容,然后从最初导入Project的原始文件中导入Project中的内容.

我最近遇到了同样的问题,重新安排我的一些进口帮助解决了这个问题.

  • 是的 - 错误似乎与循环导入有关 - 但我很困惑为什么它适用于debug = True?当然,您希望debug = True和False之间的唯一区别是调试信息 - 而不是*它是否有效*? (2认同)