Django 无法识别 DEBUG = False

Posted

技术标签:

【中文标题】Django 无法识别 DEBUG = False【英文标题】:Django doesn't recognize DEBUG = False 【发布时间】:2018-08-10 02:47:25 【问题描述】:

我正在尝试为我的 Django 项目开发 404 和 500 错误自定义模板。

当我将 DEBUG 更改为 False 时,Django 总是返回我:

您看到此错误是因为您的 Django 设置文件中有 DEBUG = True。将其更改为 False,Django 将显示标准 404 页面。

将 ALLOWED_HOSTS 更改为 ['.domain.com', 'www.domain.com'] 后,我得到:

HTTP_HOST 标头无效:“domain.com”。您可能需要将 u'domain.com' 添加到 ALLOWED_HOSTS。

我做错了什么?为什么 Django 不识别变量?

【问题讨论】:

这里没有足够的信息。设置DEBUG = False 应该可以工作,因此您需要提供有关如何重现问题的更多信息。可能您更改了错误的设置文件,或者更改后没有保存设置文件或重新启动服务器。 我在问题中添加了新信息。我使用 nginx 作为服务器 我在添加我的答案后才看到这个,您的开发环境正在使用 nginx 为站点提供服务?还是您指的是您的生产环境? 如果他们解决了您的问题,请考虑支持、接受或评论答案。这是在 SO 的其他人投入时间发布它们时向他们表示感谢的最佳方式。谢谢! 【参考方案1】:

对于它的价值,当我创建自定义 404 / 500 模板时,我发现设置一个基于临时类的 TemplateView 更容易,然后一旦我完成了它们的设计,它们就会被移动到 Django 查找它们的模板文件夹中。原因是,一旦你解决了 DEBUG 问题,你的下一个障碍很可能是获取静态文件;在典型设置中,当 DEBUG = False 时,它​​们将不会在您的开发机器上提供(除非您已将其配置为这样做)。这很重要,因为您创建的模板可能依赖于这些文件(css、js 文件等)。无论哪种方式:

1) 确保其内容完全一致:

DEBUG = False

2) 确保它没有嵌套在 if / else 语句或类似的东西中。

3) 在您的开发环境中,您可以保留 ALLOWED_HOSTS = ['localhost'] 来抑制域警告。

4) 如果一切都失败了,您可以在不同的目录中启动一个新项目,并将自动生成的 settings.py 文件与您拥有的文件进行比较。

【讨论】:

【参考方案2】:

在您的项目中找到DJANGO_SETTINGS_MODULE 环境变量。

它的值是python 路径语法。使用它来定位设置文件,因为它是 django 使用的文件,并确保 DEBUG = False。此外,您可以添加一个print 语句,它会在服务器启动时提供一些视觉反馈。

保存配置后,执行python manage.py runserver重启你的开发服务器。

【讨论】:

以上是关于Django 无法识别 DEBUG = False的主要内容,如果未能解决你的问题,请参考以下文章

Django Elasticbeanstalk:当 Debug = False 时无法访问静态文件

媒体文件未在 DEBUG=False Django 2.2.6 中显示

django开发环境setting.py里面设置debug=false时却成功加载静态文件?

使用 DEBUG=False,我如何将 django 异常记录到日志文件中

当 DEBUG = False 时 Django 转义 javascript

当 debug=False 时可能导致 Django 错误,而当 debug=True 时不存在