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

  1. django中url 和 path 的区别

    django中 url 和 path 都是配置路径,有什么不同? django.urls path django.conf.urls  url path 与 url 是两个不同的模块,效果都是响应返回 ...

  2. Django中的get()和filter()区别

    前言 在django中,我们查询经常用的两个API中,会经常用到get()和filter()两个方法,两者的区别是什么呢? object.get()我们得到的是一个对象,如果在数据库中查不到这个对象或 ...

  3. django中filter()和get()的区别

    在django中,我们查询经常用的两个API中,会经常用到get()和filter()两个方法,两者的区别是什么呢? object.get()我们得到的是一个对象,如果在数据库中查不到这个对象或者查找 ...

  4. Django中render_to_response和render的区别(转载)

    转载地址:https://www.douban.com/note/278152737/ 自django1.3开始:render()方法是render_to_response的一个崭新的快捷方式,前者会 ...

  5. Django 中的JsonResponse 和 json区别

    from django.http import JsonResponse JsonResponse 里面代码会加这一个响应头 kwargs.setdefault('content_type', 'ap ...

  6. Django中 auto_now_add 和 auto_now 的区别

    auto_now_add = True #创建时添加的时间 修改数据时,不会发生改变 auto_now = True #修改数据的时间,每次修改都会有变动 ........

  7. 当Django中Debug=False,静态文件处理方式。

    Django设置DEBUG为False时,'django.contrib.staticfiles'会关闭,即Django不会自动搜索静态文件,静态文件不能加载导致的问题有两个: 1.页面排版不正常,即 ...

  8. Django中一些常用的文档段落

    1. Settings¶ STATIC_URL¶ MEDIA_ROOT¶ MEDIA_URL¶ AUTH_USER_MODEL¶ USE_I18N¶ USE_L10N¶ USE_TZ¶    (三者默 ...

  9. Django中ORM多对多表的操作

    自己创建第三张表建立多对多关系 表的创建 # 老师表和学生表可以是一个多对多的关系,建表时可以手动建立第三张表建立关联 class Student(models.Model): name = mode ...

随机推荐

  1. ggplot的boxplot添加显著性 | Add P-values and Significance Levels to ggplots | 方差分析

    参考:Add P-values and Significance Levels toggplots 多组比较,挑选感兴趣的显示显著性. data("ToothGrowth") he ...

  2. linux debug tools

    linux modules: IO schedule.VFS.OOM.memory.net.process schedule kernel debug: perf(IO bound\CPU bound ...

  3. js下拉列表选中

    var monthobj = document.getElementById("pid");// for(var i=0; i<monthobj.options.length ...

  4. Linux 下各文件夹的含义

    /bin 该目录中存放Linux的常用命令./boot 该目录默认下存放的是Linux的启动文件和内核./cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下./dev 该目录包 ...

  5. 【转】链接伪类(:hover)CSS背景图片有闪动BUG

    来源:http://www.css88.com/archives/744 --------------------------------------------------------------- ...

  6. Web基础学习

    Servlet和Servlet容器.Web服务器概念:https://blog.csdn.net/lz233333/article/details/68065749 <初学 Java Web 开 ...

  7. os.path官方文档(附翻译)

    This module implements some useful functions on pathnames. To read or write files see open(), and fo ...

  8. 用switch组件控制一个元素的显示和隐藏状态

    微信小程序开发(交流QQ群:604788754) WXML: <view class="body-view"> <switch bindchange=" ...

  9. SGD、GD

    GD参考: https://blog.csdn.net/CharlieLincy/article/details/70767791 SGD参考:https://blog.csdn.net/Charli ...

  10. CPU、GPU、CUDA、cuDNN

    CPU擅长逻辑处理控制,GPU适合高强度的并行计算任务,为什么会存在这种差别?今天搜集了些相关资料,摘抄总结如下. 一.什么是GPU GPU这个概念是由Nvidia公司于1999年提出的.GPU是显卡 ...