You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Django不识别DEBUG=False配置,自定义错误页遇配置问题求助

解决Django中DEBUG=False不生效及ALLOWED_HOSTS配置问题

让我一步步帮你排查这两个头疼的问题:

一、为什么DEBUG=False配置没生效?

你看到的提示说明Django实际上还是在跑DEBUG=True的配置,大概率是这几个原因导致的:

  • 配置文件没被正确加载:如果你用了多环境配置(比如settings/dev.pysettings/prod.py),可能你改的是开发环境配置,但生产环境加载的是另一个配置文件。比如启动命令如果是python manage.py runserver --settings=myproject.settings.dev,那改prod里的DEBUG根本没用。
  • 配置被环境变量覆盖:很多项目会用环境变量动态设置DEBUG,比如代码里写的是DEBUG = os.environ.get('DEBUG', 'True') == 'True',这时候哪怕你在settings里写了DEBUG=False,只要环境变量里的DEBUG还是True,就会被覆盖。你可以在settings里加一行print(DEBUG),启动服务后看看控制台输出的是True还是False,直接确认是否被覆盖。
  • 服务器/进程没重启:如果你用的是uWSGI、Gunicorn或者Nginx这类生产服务器,修改配置后必须重启对应的服务,否则旧配置会一直驻留在内存里生效。哪怕是用runserver测试,也要关掉重新启动才行。
  • 配置文件语法错误:检查DEBUG=False这一行的语法,比如有没有漏写冒号,或者缩进错误、被注释干扰,导致这行代码根本没被执行。还要确认它没被条件判断包裹(比如只在开发环境才设置DEBUG的逻辑)。

二、ALLOWED_HOSTS的提示问题

你设置的['.domain.com', 'www.domain.com']有个小误区:Django里的.domain.com通配符只匹配子域名(比如www.domain.com、blog.domain.com),但不匹配主域名domain.com本身。所以当用户直接访问domain.com时,就会触发HTTP_HOST无效的提示。

解决方法很简单,把主域名也加到ALLOWED_HOSTS里就行:

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

这样既覆盖了主域名,也覆盖了所有子域名。另外提醒一句,生产环境别用['*'],这会导致主机头攻击,不安全。

最后验证步骤

  1. 确认settings里的DEBUG=False确实被加载:可以用shell命令检查python manage.py shell -c "from django.conf import settings; print(settings.DEBUG)"
  2. 重启所有相关服务(web服务器、应用服务器)
  3. 分别访问domain.com和www.domain.com,确认自定义404/500模板是否正常显示

内容的提问来源于stack exchange,提问作者user7804233

火山引擎 最新活动