首先,我们配置静态文件,要在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 的区别关系相关推荐

  1. STATIC_URL/STATIC_ROOT/STATICFILES_DIRS/urls.py中的static区别

    工程名字是: mysite 变量 修改位置 STATIC_URL mysite/settings.py STATIC_ROOT  mysite/settings.py STATICFILES_DIRS ...

  2. django中save和create的区别

    django 一对多的添加记录create 和save 方法,update 更新和save()方法的区别,查询API的方法 查询api的方法: 表.objects.all() ---[obj1,obj ...

  3. Django中filer和get的区别

    上面的例子中`` filter()`` 函数返回一个记录集,这个记录集是一个列表. 相对列表来说,有些时候我们更需要获取单个的对象, `` get()`` 方法就是在此时使用的: >>&g ...

  4. Django中HttpResponse和JsonResponse的区别和用法

    1.HttpResponse的用法 a.HttpResponse第一个参数为字符串类型(需要返回到前端的字符串数据) b.content_type可以指定响应头中的content_type类型 c.s ...

  5. Django的STATIC_ROOT和STATIC_URL以及STATICFILES_DIRS

    首先,我们配置静态文件,要在setting.py里面加入如下几行代码: settings.py # the settings above # STATIC SETTINGS STATIC_URL = ...

  6. Django框架(14.Django中模型类的关系,以及模型类关联查询)

    Django中模型类的关系,以及模型类关联查询 1.模型类关系 1.1 一对多关系 1.2多对多关系 1.3 一对一关系 1.4 一对多举例: 1.5 多对多举例: 1.6 一对一举例: 2.关联查询 ...

  7. django 中的用户身份验证和 session 的关系

    Session session 的数据存在数据库中,它在客户端是用 cookie 来识别的,作为一个票据.这个 cookie 的名称,默认就叫 "sessionid",但是可以通过 ...

  8. static的动态性:STATIC_URL和STATICFILES_DIRS的关系

    django我学到静态文件这块时,要使用静态文件,我们必须要去配置这两个东西: STATIC_URL = '/static/' STATICFILES_DIRS = (os.path.join(BAS ...

  9. django中collectstatic的使用(亲测)

    前言 我最近在琢磨django框架的使用,在上传个人网站服务器上时,再次遇到了找不到静态文件,css.img等样式全无的问题.于是沉下心来,好好研究了django的静态文件到底应该怎么去部署(depl ...

最新文章

  1. MySQL-存储过程
  2. java中字符串(1)
  3. cshtml 未能找到类型或命名空间名称“PagedList”(是否缺少 using 指令或程序集引用?)
  4. insertAdjacentHTML方法:在指定的地方插入html标签语句
  5. 数据科学 IPython 笔记本 7.1 Pandas
  6. 三种跨线程控件访问方法
  7. dell 服务器r410装系统,dell r410安装windows2003系统
  8. linux共享文件丢失,linux基础应用(NFS文件共享)
  9. 华为笔试题——分礼物
  10. 利用qiime2分析微生物组16S rRNA数据小结
  11. cortana在哪里打开_Windows 10开启Cortana的方法步骤
  12. 2021年11月23日对自己的一次鼓励
  13. ns3 学习资料和方法
  14. 域策略(2)——设置统一桌面背景
  15. android系统怎么取消,安卓系统hd怎么关闭
  16. [Vue] TodoList 案例
  17. C++ 11 特性:关联容器map、set的使用
  18. 日本“实体店”如何打败“互联网”?
  19. linux系统模拟mac,在 Linux 的 KVM 上安装 Mac OS X Mavericks 虚拟机
  20. 11_RHEL安装Maya2015

热门文章

  1. 正则爬取京东商品信息并打包成.exe可执行程序。
  2. 【读书笔记】iOS-属性
  3. 设置root密码,su与sudo的区别
  4. thinkphp的控制器包含在Url中时注意区分大小写
  5. [Spring Data MongoDB]学习笔记--建立数据库的连接
  6. srm 593 dv2 1000pt
  7. 把有限的精力放在最有意义的事上
  8. 优先级队列 c语言,队列优先级
  9. 前端 python java三者哪个比较容易就业_前端和后端(Java)开发哪个难?,哪个学习容易一点?...
  10. 在Visual Studio 2005里,用ActiveSync来同步模拟器(Windows Mobile 5.0 )