You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署到Heroku的Django应用静态文件返回404,本地DEBUG=False运行正常如何解决

问题原因

Django 在DEBUG=False的生产模式下默认不会提供静态文件服务,本地测试时即使关闭DEBUG也能正常访问静态文件,是因为runserver启动的开发服务器做了兼容处理,但Heroku上运行的是生产级WSGI服务器,不会自动处理静态资源。同时你配置的django_heroku.settings(locals(), staticfiles=False)也关闭了django-heroku库自带的静态文件自动处理逻辑,所以会返回404。

解决方案

按照以下步骤操作即可修复:

  • 首先安装whitenoise,这是Heroku上处理Django静态文件的标准方案
    执行命令:pip install whitenoise
    安装完成后更新requirements.txt文件,把whitenoise的依赖加进去
  • 修改settings.py的中间件配置,把WhiteNoise中间件添加到列表的第二位,紧接在SecurityMiddleware之后:
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        # 新增下面这行
        'whitenoise.middleware.WhiteNoiseMiddleware',
        # 后面的原有中间件保持不变
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        ...
    ]
    
  • 你可以把配置末尾的django_heroku.settings(locals(), staticfiles=False)中的staticfiles=False参数删除,或者直接保留也不影响whitenoise的正常工作
  • 提交代码重新部署到Heroku,平台会自动执行python manage.py collectstatic命令把所有静态文件收集到你配置的STATIC_ROOT目录下
  • 如果部署后还是有问题,可以手动执行Heroku命令执行静态文件收集:heroku run python manage.py collectstatic

额外提示:你的settings.py中先后两次定义了BASE_DIR,第一次用Path语法,第二次用os.path语法,虽然不影响静态文件加载,但建议统一写法避免后续其他配置出错

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:57:03