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 指定了多个目录,文件有重复,只会复制第一个。

posted @ 2026-07-26 11:01  吴思老  阅读(4)  评论(0)    收藏  举报