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 只影响上图, 不影响静态文件的地址

Django中STATIC_URL、STATIC_ROOT、STATICFILES_DIRS 的区别关系的更多相关文章
- django中url 和 path 的区别
django中 url 和 path 都是配置路径,有什么不同? django.urls path django.conf.urls url path 与 url 是两个不同的模块,效果都是响应返回 ...
- Django中的get()和filter()区别
前言 在django中,我们查询经常用的两个API中,会经常用到get()和filter()两个方法,两者的区别是什么呢? object.get()我们得到的是一个对象,如果在数据库中查不到这个对象或 ...
- django中filter()和get()的区别
在django中,我们查询经常用的两个API中,会经常用到get()和filter()两个方法,两者的区别是什么呢? object.get()我们得到的是一个对象,如果在数据库中查不到这个对象或者查找 ...
- Django中render_to_response和render的区别(转载)
转载地址:https://www.douban.com/note/278152737/ 自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式,前者会 ...
- Django 中的JsonResponse 和 json区别
from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type', 'ap ...
- Django中 auto_now_add 和 auto_now 的区别
auto_now_add = True #创建时添加的时间 修改数据时,不会发生改变 auto_now = True #修改数据的时间,每次修改都会有变动 ........
- 当Django中Debug=False,静态文件处理方式。
Django设置DEBUG为False时,'django.contrib.staticfiles'会关闭,即Django不会自动搜索静态文件,静态文件不能加载导致的问题有两个: 1.页面排版不正常,即 ...
- Django中一些常用的文档段落
1. Settings¶ STATIC_URL¶ MEDIA_ROOT¶ MEDIA_URL¶ AUTH_USER_MODEL¶ USE_I18N¶ USE_L10N¶ USE_TZ¶ (三者默 ...
- Django中ORM多对多表的操作
自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = mode ...
随机推荐
- scrapy爬虫具体案例步骤详细分析
scrapy爬虫具体案例详细分析 scrapy,它是一个整合了的爬虫框架, 有着非常健全的管理系统. 而且它也是分布式爬虫, 它的管理体系非常复杂. 但是特别高效.用途广泛,主要用于数据挖掘.检测以及 ...
- P3953 逛公园
传送门 花了一个下午才 A 的毒瘤题 思路: 这题需要建两个图,一个正向图,一个反向图. 先在正向图上跑一遍 dijkstar ,计算出每个点到 点1 的最短路径 . 然后在反向图上开始记忆化搜索: ...
- java笔记 -- 输入输出
读取输入: 如果想通过控制台进行输入, 首先需要构造一个Scanner对象.并与'标准输入流'System.in关联. 代码见下文代码块. Sanner (InputStream in) 用给定的输入 ...
- Python字符串 --Python3
Python语言中,字符串是用两个双引号或者单引号括起来的词汇表或多个字符. 1.Python字符串的两种序号体系 反向递减序号:-- -9 -8 -7 -6 -5 -4 -3 -2 -1 正向递增序 ...
- warning C4828问题的处理
在QT的一些项目中,有时候会出现如下警告 warning C4828: 文件包含在偏移 0x215 处开始的字符,该字符在当前源字符集中无效(代码页 65001). (编译源文件 XXXXXXcpp) ...
- charles\mitmproxy\appium的安装与使用
一.charles安装与激活1.https://www.charlesproxy.com/documentation/installation/下载dmg包安装后要将应用添加到Mac的应用目录中,一般 ...
- C# WPF开发之MVVM模式开发
MVVM模式由Model,View,ViewModel三部分组成. Model需继承INotifyPropertyChange(属性修改通知) ViewModel负责业务逻辑,连接View和Model ...
- 自动化定位——通过XPath定位元素
XPath是一种XML文档中定位元素的语言.该定位方式也是比较常用的定位方式 1通过属性定位元素 find_element_by_xpath("//标签名[@属性='属性值']") ...
- Matlab:双曲方程
tic; clear clc M=[, ];%空间步数 N=*M;%时间步数 :length(M) h=/M(k);%空间步长 tau=/N(k);%时间步长 s=tau/h;%步长比 x=:h:; ...
- line-height:150%与line-height:1.5的区别
今天看到一篇文章,说的是CSS学习中的瓶颈,我最近也发现自己css很薄弱,写的样式总是有兼容性问题,要写很久,发现了一个问题,我从来没有用过line-height:150和line-height:1. ...
