1. Django 静态文件分类
Django 静态文件分为两类:static 和 media。
- static: 是页面引用的 JS、CSS、Image 等文件
- media:是用户上传的文件
2. 生产环境配置
生产环境,通常配置 Nginx 转发静态文件请求,而 Django 处理动态请求。
nginx 配置
|
|
在部署时,需要执行 python manage.py collectstatic 命令将 INSTALLED_APPS 列表内的全部 Django App 的静态资源收集到 STATIC_ROOT 指定的目录。
3. 开发环境配置
3.1 配置和使用
第一步,在 INSTALLED_APPS 中加入 ‘django.contrib.staticfiles’
第二步,在 urls.py 中新增如下路由,仅在 settings.DEBUG==True 时生效,正式环境使用 Nginx 转发。
|
|
第三步,在 settings 文件 TEMPLATES - OPTIONS - context_processors 配置中添加
|
|
第四步,在模板中使用 STATIC_URL
、MEDIA_URL
变量
static 文件
|
|
media 文件
|
|
3.2 处理流程
第一步,Django 收到一个静态文件的请求,例如,/static/css/main.css
第二步,Django 在 STATICFILES_DIRS
中寻找 css/main.css 这个文件
如果第二步找到了,直接返回该文件,否则在 INSTALLED_APPS
列表内全部 Django App 的 static 目录下继续查找。
4. static 相关变量
4.1 STATIC_ROOT
指定执行 python manage.py collectstatic
命令时,静态文件存储的目录
4.2 STATIC_URL
URL 映射,指定静态目录的 URL,默认值为:
|
|
4.3 STATICFILES_DIRS
STATICFILES_DIRS
是一个列表,指定工程里哪些目录存放了静态文件。
4.4 STATICFILES_STORAGE
使用 python manage.py collectstatic
命令收集静态文件时,Django 使用的文件存储引擎。如果需要将静态文件托管在其他地方,那么需要修改 STATICFILES_STORAGE 参数,实现相应的方法即可。默认值为:
|
|
4.5 STATICFILES_FINDERS
在开发环境下 django.contrib.staticfiles 查找静态资源的顺序取决于 STATICFILES_FINDERS 的配置,STATICFILES_FINDERS
默认配置如下:
|
|
- django.contrib.staticfiles.finders.FileSystemFinder 用来从 STATICFILES_DIRS 指定的路径中查找静态文件
- django.contrib.staticfiles.finders.AppDirectoriesFinder 是从 INSTALLED_APPS 列表内全部 Django App 的 static 目录中查找静态文件
5. media 相关变量
5.1 MEDIA_ROOT
MEDIA 存储的是用户上传的文件,比如在 Model 里面的FileField 的文件。如果定义MEDIA_ROOT=C:\media,那么 File = models.FileField(upload_to='file/')
,上传的文件就会被保存到 C:\media\file
在 settings 里面设置的 MEDIA_ROOT必须是绝对路径,可以这样写:
|
|
5.2 MEDIA_URL
MEDIA_URL
是指从浏览器访问时的 URL 前缀,例如:
|
|
当浏览器访问:http://localhost/mymedia/1.png 就是访问 c:\media\1.png