Django资源文件配置
资源文件配置
资源文件配置分为静态资源和媒体资源。静态资源的配置方式由配置属性STATIC_URL、STATICFILES_DIRS和STATIC_ROOT进行配置;媒体资源的配置方式有配置属性MEDIA_URL和MEDIA_ROOT决定。
- 静态资源: 指的是网站中不会改变的文件。在一般的应用程序中,静态资源包括CSS文件、Javascript文件以及图片等资源文件。
- 媒体资源: 对于一些经常变动的资源,通常将其放在媒体资源文件夹,如用户头像、歌曲文件等。
静态资源和媒体资源可以同时存在,两者可以独立运行,互不影响。
1.1、静态资源
1.1.1 资源路由—STATIC_URL
Django的默认配置信息如下:
上述配置是设置静态文件的路由地址,其作用是通过浏览器访问Django的静态资源。默认情况下,Django只能识别项目应用App的static文件夹里面的静态资源。当项目启动时,Django会从项目应用App里面查找相关的资源文件,查找功能主要由App列表INSTALL_APPS的staticfiles实现。在index(应用名称)中手动创建static文件夹并在文件夹中放入静态文件。
Django在调试模式(DEBUG=True)下只能识别项目应用App的static文件夹里面的静态资源,如果该文件夹改为其他名字,Django就无法识别,若static文件夹放在MyDjango的项目目录下,则Django也是无法识别的。也就是说,资源路由STATIC_URL的值为/static/,则浏览器访问静态资源的网站必须为static,否则无法访问,并且Django在调试模式(DEBUG=True)下只能识别App目录下的static文件夹。
1.1.2 资源集合—STATICFILES_DIRS
存在感: 解决STATIC_URL的不足。由于STATIC_URL的特殊性,在开发中会造成诸多不便,比如将静态文件夹存放在项目的根目录以及定义多个静态文件夹等。
在配置文件settings.py中手动设置STATICFILES_DIRS属性。该属性以列列表形式表示,设置方式如下:
STATICFILES_DIRS = [
# 设置根目录的静态资源文件夹static
os.path.join(BASE_DIR,'static'),
#设置App(index)的静态资源文件夹MyStatic
os.path.join(BASE_DIR,'index/Mystatic'),
]
此时项目中App应用(index)文件下的MyStatic和static以及项目根目录下的static文件夹都可以存放静态资源。浏览器访问的时候,图片路径(静态资源)皆为http://127.0.0.1:8000/static/xxx.jpg。若将STATIC_URL的值改为AllStatic,再次重启项目,则在浏览器上图片资源路径的static则改为Allstatic。
1.1.3 资源部署—STATIC_ROOT
作用是在服务器上部署项目,实现服务器和项目之间的映射。STATIC_ROOT主要收集整个项目的静态资源并放在一个新的文件夹,然后由该文件夹与服务器之间构建映射关系。STATIC_ROOT配置如下:
STATIC_ROOT = os.path.join(BASE_DIR,'AllStatic')
当项目的配置属性DEBUG设为True的时候,Django会自动提供静态文件代理服务,此时整个项目处于开发阶段,因此无需使用STATIC_ROOT。当配置属性DEBUG设为False的时候,意味着项目进入生产环境,Django不再提供静态文件代理服务,此时需要在项目的配置文件中设置STATIC_ROOT。
设置STATIC_ROOT需要使用Django操作指令collectstatic来收集所有静态资源,这些静态资源都会保存STATIC_ROOT所设置的文件夹里。
1.2、媒体资源
在项目的根目录下手动创建media文件夹。
1.2.1、资源路由—MEDIA_URL
# 设置媒体路由地址信息
MEDIA_URL = '/media/'
1.2.2、获取media文件夹在路径信息—MEDIA_ROOT
# 获取media文件夹的完整路径信息
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
配置属性设置后,还需要将media文件夹注册到Django里,让Django知道如何找到媒体文件,否则无法在浏览器*问该文件夹的文件信息。此时需要打开MyDjango文件夹的urls.py文件,为媒体文件夹media添加相应的路由地址,代码如下:
from django.contrib import admin
from django.urls import path,re_path
# 导入项目应用index
from index.views import index
# 配置媒体文件夹media
from django.views.static import serve
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls),
path('',index),
# 配置媒体文件的路由地址
re_path('media/(?P<path>.*)',serve,{'document_root':settings.MEDIA_ROOT},name = 'media'),
]
下一篇: Python 基础整理(未完)