Django静态配置 static与media
看了几个写media和static的,感觉同质性好大,可能对具体问题没有帮助,所以我写点自己的看法,如有错误往指出。
1:static
我们在项目创建一个文件夹,叫static(其他名字也行),里面一般放js,css,img啥的,这个随意。
接着我们在setting.py中设置关联到文件夹
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static(文件夹的名字)'),
]
# 这一步的意思是我把静态文件放在static文件夹下,后面我可以用 {% xxx 'static文件夹下的路径' %} 去拿到文件
此时我们看到上面的xxx,其实是要给他们一个名称
STATIC_URL = 'static/'
# 这一步的意思是 {% xxx 'static文件夹下的路径' %} 中的xxx就是static
这个时候就可以拿到static文件夹下的文件了
# 其实 {% xxx 'static文件夹下的路径' %} == ip/xxx/static文件夹下的路径 这个url路径,前一个是模板语言写法(一般用于css引入)渲染后其实和后面一样,后一个直接写死(一般用于a标签)
# 替换 {% static 'static文件夹下的路径' %} == ip/static/static文件夹下的路径
在部署的时候我们需要收集所有的文件到一个文件夹下
STATIC_ROOT = os.path.join(BASE_DIR, "file/")
# 所有静态文件会收集到file目录下,用于uwsgi直接调用
2:media
media和static一样,我们需要在url上能够拿到文件
同样,我们项目根创建一个media文件夹,然后关联上
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
这一个其实类似于STATIC_ROOT,只不过他没有收集,直接就是一个static收集后的状态,类似于file
而且它不可以用模板语法,只可以用 ip/xxx/media文件夹下的路径 来拿到
MEDIA_URL = "media/"
# 设置xxx=media
注意一下,django自动就处理static,使他能够 ip/static/xxx 访问,而media不行
所以我们要在django根目录的url.py里添加设置一下
# 这里就是配置 ip/media/xxx
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
# urlpatterns += static(settings.MEDIA_URL(media), document_root=settings.MEDIA_ROOT(media文件夹))