根据django文档,在debug模式下,web服务可以托管静态资源(css,js,png,jpg…),但是在生产环境下就要使用第三方服务了,比如apache,nginx, IIS等。同时django也提供了命令行工具将静态资源收集到同一个目录,再使用nginx等工具托管此静态目录,但是仍然存在浏览器缓存的问题。常见的解决方案是使用webpack等工具在打包发布时,将静态资源的文件名增加一个检验码做后缀,比如 main.js打包后变成了main.3e230fdf.js。
whitenoise(https://pypi.org/project/whitenoise/)就是一个用来管理python web项目静态资源的工具。并且支持WSGI兼容的应用, 在django中使用时,支持自动配置的特性。
以下是whitenoise的主要版本需求,详情请参考官方文档中(https://whitenoise.readthedocs.io/en/latest/changelog.html):
| whitenoise版本 | python版本 | django版本 | 
| 6.10.0 | 支持3.1.4 | |
| 6.9.0 | 支持5.2 | |
| 6.8.0 | 支持3.1.3 / 移除3.8 | 移除3.2-4.1 | 
| 6.7.0 | 支持5.1 | |
| 6.6.0 | 移除3.7 | 支持5.0 | 
| 6.5.0 | 支持python3.12 | |
| 6.4.0 | 支持4.2 | |
| 6.2.0 | 支持python3.11 | 支持4.1 | 
| 6.1.0 | 移除2.2/3.0/3.1 | |
| 6.0.0 | 支持3.9,3.10、 移除3.5,3.6 | 移除1.11/2.0/2.1、支持4.0 | 
安装
pip install whitenoise
在django中的配置,编辑settings.py文件,将whitenoise添加到MIDDLEWARE列表中,位置是SecurityMiddleware之后
MIDDLEWARE = [
    # ...
    "django.middleware.security.SecurityMiddleware",
    "whitenoise.middleware.WhiteNoiseMiddleware",
    # ...
]
如果需要支持缓存和压缩,在settings.py中添加
STORAGES = {
    # ...
    "staticfiles": {
        "BACKEND": "whitenoise.storage.CompressedManifestStaticFilesStorage",
    },
}
还要记得在settings.py中配置静态资源目录:
STATIC_ROOT = BASE_DIR / "staticfiles"
完成以上配置后,在发布django应用的生产环境时,不需要单独使用nginx等工具托管静态资源,只需要执行收集资源的命令,whitenoise会托管STATIC_ROOT中配置的静态资源文件
python manage.py collectstatic
但是,在开发环境下,静态资源仍然被django托管,会导致开发环境和生产环境下的结果不同,那么还需要在settings.py中增加以下配置,在开发环境下也使用whitenoise托管静态资源,无需执行收集静态资源的命令
INSTALLED_APPS = [
    # ...
    "whitenoise.runserver_nostatic",
    "django.contrib.staticfiles",
    # ...
]
whitenoise还有更多关于django的细节配置参数,参考文档:https://whitenoise.readthedocs.io/en/latest/django.html
2025/9/10 北京,上东廓