如何在Django中设置Debug=False与Allowed_hosts避免出现Http 500错误
Django设置Debug=False触发500错误解决方案
修复步骤:
- 修正WhiteNoise中间件顺序
你当前配置中WhiteNoise中间件放在了中间件列表末尾,官方要求必须放在SecurityMiddleware之后、所有其他中间件之前,修改后的MIDDLEWARE配置如下:
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', # WhiteNoise调整到该位置 'whitenoise.middleware.WhiteNoiseMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', # 删除原来放在末尾的WhiteNoise配置 ]
- 补充STATIC_ROOT配置
Debug关闭时Django必须指定静态文件收集的目标路径,在静态文件配置段新增一行:
STATIC_ROOT = BASE_DIR / "staticfiles"
- 本地测试前执行静态文件收集
你使用了带哈希的压缩静态文件存储,本地测试Debug=False前必须先执行收集命令:
python manage.py collectstatic
- 确认SECRET_KEY可正常读取
检查本地环境变量或.env文件中是否正确配置了SECRET_KEY,decouple的config方法如果读取不到配置会直接抛出异常,Debug关闭时不会显示具体错误只会返回500。 - (可选)开启错误日志定位问题
如果按以上步骤修复后仍有问题,可在settings.py中添加日志配置输出具体错误原因:
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'file': { 'level': 'ERROR', 'class': 'logging.FileHandler', 'filename': BASE_DIR / 'debug.log', }, }, 'loggers': { 'django': { 'handlers': ['file'], 'level': 'ERROR', 'propagate': True, }, }, }
内容的提问来源于stack exchange,提问作者Eliska
相关产品推荐
相关产品推荐

