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 ...
随机推荐
- Kotlin 类和对象
类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...
- Descriptio Resource Path LocationType Archive for required library: 'D:/apache-maven/apache-maven-3.6.0/mavenrepository/org/springframework/spring-aspects/4.3.7.RELEASE/spring-aspects-4.3.7.RELEASE.
eclipse创建了一个maven项目后,在导入依赖包后返现项目有个红色刺眼的感叹号,再看控制台有个Problem提示 Descriptio Resource Path LocationType Ar ...
- wine安装稳定使用falsh播放器
1安装wine,wine安装使用网上自行查找 2.安装flash播放器.exe 下载附件的falsh播放相关.tar.gz,解压后得到 Flash.ocx (flash10 for windows的插 ...
- gitlab-runner部署
Gitlab在线安装部署参考 一. 环境 系统 版本 备注 Centos 7_64 建议使用4GB RAM和4或8个CPU内核 二. 安装并配置必要的依赖项 a) 在centos ...
- restful接口定义的几种方式
GET (SELECT): Retrieve a specific Resource from the Server, or a listing of Resources. #从服务器检 ...
- C#操作PDF文件打印
操作PDF文档时,打印是常见的需求之一.针对不同的打印需求,可分多种情况来进行,如设置静默打印.指定打印页码范围和打印纸张大小.双面打印.黑白打印等等.经过测试,下面将对常见的几种PDF打印需求做一些 ...
- 安装和启动json-server
安装json-server JSON-Server 是一个 Node 模块,运行 Express 服务器,你可以指定一个 json 文件作为 api 的数据源 npm i -g json-server ...
- 【转】解决Android 6.0 NoSuchContextException 和WEBVIEW_undefined 的问题
在 Android 4.4 操作系统上测试混合应用时,可以直接顺利的在native模式和webview模式之间切换,但是在Android6.0 操作系统上却报NoSuchContextExceptio ...
- 一个简单的对任意list分页的工具-----PageUtil
一.工具类代码 1 import java.util.List; 2 import java.util.stream.Collectors; 3 4 public class PageUtil< ...
- springboot 默认异常处理
SpringBoot默认有自定义异常处理的体系,在做SpringBoot项目的时候,如果是抛出了运行时异常,springBoot并会对异常进行处理,返回如下异常信息: { "timestam ...
