Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系
首先,我们配置静态文件,要在setting.py里面加入如下几行代码:
settings.py
# the settings above
# STATIC SETTINGS
STATIC_URL = '/static/'
# the dir for command "python manage.py collectstatic"
# BASE_DIR 是项目的绝对地址
STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static')
# locate the common static files
#以下不是必须的
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'common_static'),)
1. STATIC_ROOT
STATIC_ROOT 是在部署静态文件时(pyhtonmanage.pycollectstatic)所有的静态文静聚合的目录
STATIC_ROOT要写成绝对地址,在这里,比如我的项目mysite是/home/mysite/
那么STATIC_ROOT 为 /home/mysite/collect_static/
当部署项目时,在终端输入:
python manage.py collectstatic
django会把所有的static文件都复制到STATIC_ROOT文件夹下
2. STATICFILES_DIRS
STATIC_ROOT 是在部署的时候才发挥作用, 而实际情况下,静态文件的一般安放位置有两种:
1. 一种就是在每个app里面新建一个static文件夹,将静态文件放到里面,在加载静态文件时,
比如要在模板中用到静态文件,django会自动在每个app里面搜索static文件夹
(所以,不要把文件夹的名字写错哦, 否则django就找不到你的文件夹了)
2. 另一种,就是在所有的app文件外面,建立一个公共的文件夹,
因为有些静态文件不是某个app独有的,那么就可以把它放到一个公共文件夹里面,方便管理
(注意,建立一个公共的静态文件的文件夹只是一种易于管理的做法,但是不是必须的,
app是可以跨app应用静态文件的,因为最后所有的静态文件都会在STATIC_ROOT里面存在)
那现在的问题是如何让django知道你把一些静态文件放到app以外的公共文件夹中呢,那就需要配置STATICFILES_DIRS了
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'common_static'),
)
STATICFILES_DIRS告诉django,首先到STATICFILES_DIRS里面寻找静态文件,其次再到各个app的static文件夹里面找
(注意, django查找静态文件是惰性查找,查找到第一个,就停止查找了)
3. STATIC_URL
那么到此为止,静态文件的机制就可以运作了,但是有一个问题,我能不能通过url直接访问我在项目中的静态文件呢,答案肯定是啦,
但是,注意,你是在浏览器是访问,你不可能输入你的静态文件的本地绝对地址吧,
比如我的一种图片的本地地址为 /home/mysite/common_static/myapp/photo.png
那么别人不可能在浏览器上直接输入:
http://192.168.1.2:8000/home/mysite/common_static/myapp/photo.png
这样子,浏览器会报错, 没有该页面
那么django是如何让浏览器也可以访问服务器上的静态文件呢,前面已经说了,直接访问服务器本地的地址是不行的,那就需要一个映射,
django利用STATIC_URL来让浏览器可以直接访问静态文件,比如:
STATIC_URL = '/static/'
那么可以在浏览器上输入:
http://192.168.1.2:8000/static/common_static/myapp/photo.png
那么就相当与访问/home/mysite/common_static/myap/photo.png
所以在浏览器上,利用前缀 STATIC_URL的具体内容,来映射STATIC_ROOT,
HTTP://192.168.1.2:8000/static 相当于 本地地址的STATIC_ROOT
STATIC_URL 只影响上图, 不影响静态文件的地址
转载于:https://www.cnblogs.com/huangrenfeng/p/10513003.html
Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系相关推荐
- STATIC_URL/STATIC_ROOT/STATICFILES_DIRS/urls.py中的static区别
工程名字是: mysite 变量 修改位置 STATIC_URL mysite/settings.py STATIC_ROOT mysite/settings.py STATICFILES_DIRS ...
- django中save和create的区别
django 一对多的添加记录create 和save 方法,update 更新和save()方法的区别,查询API的方法 查询api的方法: 表.objects.all() ---[obj1,obj ...
- Django中filer和get的区别
上面的例子中`` filter()`` 函数返回一个记录集,这个记录集是一个列表. 相对列表来说,有些时候我们更需要获取单个的对象, `` get()`` 方法就是在此时使用的: >>&g ...
- Django中HttpResponse和JsonResponse的区别和用法
1.HttpResponse的用法 a.HttpResponse第一个参数为字符串类型(需要返回到前端的字符串数据) b.content_type可以指定响应头中的content_type类型 c.s ...
- Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS
首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py # the settings above # STATIC SETTINGS STATIC_URL = ...
- Django框架(14.Django中模型类的关系,以及模型类关联查询)
Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...
- django 中的用户身份验证和 session 的关系
Session session 的数据存在数据库中,它在客户端是用 cookie 来识别的,作为一个票据.这个 cookie 的名称,默认就叫 "sessionid",但是可以通过 ...
- static的动态性:STATIC_URL和STATICFILES_DIRS的关系
django我学到静态文件这块时,要使用静态文件,我们必须要去配置这两个东西: STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.join(BAS ...
- django中collectstatic的使用(亲测)
前言 我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css.img等样式全无的问题.于是沉下心来,好好研究了django的静态文件到底应该怎么去部署(depl ...
最新文章
- MySQL-存储过程
- java中字符串(1)
- cshtml 未能找到类型或命名空间名称“PagedList”(是否缺少 using 指令或程序集引用?)
- insertAdjacentHTML方法:在指定的地方插入html标签语句
- 数据科学 IPython 笔记本 7.1 Pandas
- 三种跨线程控件访问方法
- dell 服务器r410装系统,dell r410安装windows2003系统
- linux共享文件丢失,linux基础应用(NFS文件共享)
- 华为笔试题——分礼物
- 利用qiime2分析微生物组16S rRNA数据小结
- cortana在哪里打开_Windows 10开启Cortana的方法步骤
- 2021年11月23日对自己的一次鼓励
- ns3 学习资料和方法
- 域策略(2)——设置统一桌面背景
- android系统怎么取消,安卓系统hd怎么关闭
- [Vue] TodoList 案例
- C++ 11 特性:关联容器map、set的使用
- 日本“实体店”如何打败“互联网”?
- linux系统模拟mac,在 Linux 的 KVM 上安装 Mac OS X Mavericks 虚拟机
- 11_RHEL安装Maya2015
热门文章
- 正则爬取京东商品信息并打包成.exe可执行程序。
- 【读书笔记】iOS-属性
- 设置root密码,su与sudo的区别
- thinkphp的控制器包含在Url中时注意区分大小写
- [Spring Data MongoDB]学习笔记--建立数据库的连接
- srm 593 dv2 1000pt
- 把有限的精力放在最有意义的事上
- 优先级队列 c语言,队列优先级
- 前端 python java三者哪个比较容易就业_前端和后端(Java)开发哪个难?,哪个学习容易一点?...
- 在Visual Studio 2005里,用ActiveSync来同步模拟器(Windows Mobile 5.0 )