Django的静态资源管理(一):默认配置 STATIC_URL、STATICFILES_DIRS、STATIC_ROOT
Django的静态资源管理(一):默认配置 STATIC_URL、STATICFILES_DIRS、STATIC_ROOT
Django 的静态资源管理
在开发模式(DEBUG=True)下,Django 提供静态资源服务。便于开发。
在生产模式(DEBUG=False)下,Django 不提供静态资源服务。静态资源应该交给专门的文件服务器(例如 Nginx)来处理。
Django 的静态资源配置项
Django有三个静态资源配置
STATIC_URL
STATICFILES_DIRS
STATIC_ROOT
STATIC_URL
静态资源访问路径。
在客户端(浏览器)访问静态资源的路径。
举例来说:
STATIC_URL = '/static/'
这个配置的含义是:当浏览器请求 /static/ Django 会把这个请求当做静态资源处理。
例如这个请求:
http://127.0.0.1:8000/static/images/cat.jpg
Django 会从本地磁盘(STATICFILES_DIRS 目录)找到 /images/cat.jpg 文件,返回给浏览器。
注意:需要 DEBUG=True
STATICFILES_DIRS
这是个列表,指向多个目录。当客户端请求静态资源时,Django 会遍历这个列表,返回找到的第一个文件。如果 STATICFILES_DIRS 中没有找到,会去各个 app 下的 static 目录下找。
也就是说,Django 的设计:公共的静态资源,放在 STATICFILES_DIRS 目录下。各个应用的静态资源,放在各个应用下的 static 目录。但是现在普遍使用前后端分离的开发模式,前端开发人员把打包好的静态资源,扔进 STATICFILES_DIRS 目录即可。
举例来说:
STATIC_URL = '/static/'
STATICFILES_DIRS = ['staticfiles']
用户请求
http://127.0.0.1:8000/static/images/cat.jpg
Django 会返回 STATICFILES_DIRS 目录下的 /images/cat.jpg 文件。如果没有,会返回各个应用的静态资源 {APP_NAME}/static/images/cat.jpg,如果都没有,报错 404。
注意:需要 DEBUG=True
STATIC_ROOT
注意,该配置是绝对路径。
这个配置不是给 Django 自己用的,是把所有的静态资源打包好,给别人用的。
假设我们用 Nginx 专门处理文件,但是 Django 的静态资源分散在各个目录中,Nginx 难以处理。Django 可以把所有的静态资源都收集到 STATIC_ROOT 目录,这样后续处理就方便了。
举例来说:
STATICFILES_DIRS = ['staticfiles']
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
收集静态资源命令:
python manage.py collectstatic
这个命令会把 STATICFILES_DIRS 目录下所有的静态资源(包括各个 app 下的 static 目录),都复制到 STATIC_ROOT 目录。
如果 STATICFILES_DIRS 指定了多个目录,文件有重复,只会复制第一个。

浙公网安备 33010602011771号