Django实现media、static静态资源通过url加载访问
Django项目中一般上传的静态文件会存储在根目录的media
文件夹下,template模板使用的静态css、js、image等文件存在static
目录下,所以如何配置media
、static
目录的静态访问?
官方文档:https://docs.djangoproject.com/en/4.0/howto/static-files/
How to manage static files (e.g. images, JavaScript, CSS)
修改setting.py配置文件
首先确认django.contrib.staticfiles
在INSTALLED_APPS
配置项中
INSTALLED_APPS = [
...
"django.contrib.staticfiles",
...
]
media
、static
文件夹位置需要修改setting.py
配置文件,使项目指导文件夹位置在哪。具体配置如下:
STATIC_URL = "/static/"
MEDIA_ROOT = "media"
MEDIA_URL = "/media/" # 跟STATIC_URL类似,指定用户可以通过这个url找到文件
配置urls.py路由访问
在urls.py
文件中配置静态资源访问路由。
# 这是手动引用项目中的setting文件,如果是这样引用settings.STATIC_ROOT应该写成settings.STATIC_URL
# from hwblog import settings
from django.conf import settings # 这是自动引用Django中的setting配置
from django.conf.urls.static import static
urlpatterns = ([
# ... the rest of your URLconf goes here ......
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
)
扩展-STATICFILES_DIRS配置
在项目中有可能静态资源存储的位置不仅在static
目录下,这时可以修改setting.py
文件添加STATICFILES_DIRS
配置增加多个静态资源目录,Django会在list中的目录去寻找url访问的资源。
# 设置django的静态文件目录列表
# 官方文档:https://docs.djangoproject.com/en/4.0/ref/settings/#std-setting-STATICFILES_DIRS
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
"D:\static\media\cakeimages",
("download", "D:\static\download"), # 通过(prefix, path) tuple形式对访问路径设置别名
]
增加配置后就可以通过http://127.0.0.1:8000/static/xxx.jpg
来访问D:\static\media\cakeimages
目录下的xxx.jpg
资源。
别名的访问通过http://127.0.0.1:8000/static/download/meixi.jpg
来访问D:\static\download
目录下meixi.jpg
资源。