Django静态资源URL指向APP自带static目录而非STATIC_ROOT指定目录问题求助
Django DEBUG模式静态资源路径匹配问题解答
根本原因
这是Django开发模式的默认设计逻辑,具体如下:
- 当
DEBUG = True时,Django会自动启用django.contrib.staticfiles提供的开发环境静态资源服务,该服务的资源查找规则完全不会读取STATIC_ROOT目录:- 优先查找
STATICFILES_DIRS配置项指定的自定义静态目录 - 其次遍历所有在
INSTALLED_APPS中注册的应用下的static子目录,匹配对应路径的资源
- 优先查找
STATIC_ROOT是生产环境专用配置,仅作为collectstatic命令的汇总输出目录存在,Django本身不会主动将其纳入开发环境的静态资源查找路径。
开发环境读取STATIC_ROOT的方案
如果需要在开发模式下优先读取run/static下的汇总资源,可将STATIC_ROOT加入STATICFILES_DIRS配置:
STATICFILES_DIRS = [ join(PROJECT_ROOT, 'run', 'static'), ]
注意:该配置仅适用于本地开发场景,生产环境需要关闭
DEBUG,通过Nginx、Caddy等Web服务器直接指向STATIC_ROOT目录提供静态资源服务,不要使用Django自身处理静态资源。
内容的提问来源于stack exchange,提问作者Fabio.Gond
相关产品推荐
相关产品推荐

