Python Django中的STATIC_URL 设置和使用方式


Posted in Python onMarch 27, 2020

使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了。特记录下来。

关键的概念:Django中,静态资源的存放通过设置 STATIC_URL, STATICFILES_DIRS 来设置,一般STATIC_URL设置为:/static/

STATIC_URL='/static/', 这个static 是在Django 具体APP下建立的static目录,用来存放静态资源。而STATICFILES_DIRS一般用来设置通用的静态资源,对应的目录不放在APP下,而是放在Project下,例如:

STATICFILES_DIRS=(os.path.join(BASE_DIR, "common_static"),)

具体在模板文件中访问的时候,都是统一用:/static/资源名的方式,就可以访问到资源,不论具体的目录是APP下的static,还是project下的common_static, 都可以用/static/资源名的方式访问到。

为增强可移植性,在模板中可以用:STATIC_URL来代替具体的/static/来设置资源路径,但是需要在settings.py中2个地方进行设置,否则会发生取不到资源的错误:

1. INSTALLED_APPS 中,加入 'django.contrib.staticfiles'

2. TEMPLATES 中,context_processors中,加入django.template.context_processors.static

模板中调用时:

<img src="{{STATIC_URL}}pic.jpg " />

补充知识:Django中static(静态)文件详解以及{% static %}标签的使用

在一个网页中,不仅仅只有一个html骨架,还需要css样式文件,js执行文件以及一些图片等。因此在DTL中加载静态文件是一个必须要解决的问题。在DTL中,使用static标签来加载静态文件。要使用static标签,首先需要{% load static %}。

加载静态文件的步骤如下:

首先确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS中。

确保在settings.py中设置了STATIC_URL。

注意: 上面两条都是在创建Django 项目的时候就自动给我们弄好了,只要我们没有去改动它,就不用管。

在已经安装了的app下创建一个文件夹叫做static,然后再在这个static文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下。例如你的app叫做book,有一个静态文件叫做book.jpg,那么路径为book/static/book/book.jpg。

(为什么在app下创建一个static文件夹,还需要在这个static下创建一个同app名字的文件夹呢?原因是如果直接把静态文件放在static文件夹下,那么在模版加载静态文件的时候就是使用book.jpg,如果在多个app之间有同名的静态文件,这时候可能就会产生混淆。而在static文件夹下加了一个同名app文件夹,在模版中加载的时候就是使用app名/book.jpg,这样就可以避免产生混淆。)

注意: 文件夹的名字必须为static 。

如果有一些静态文件是不和任何app挂钩的。即不再任何一个app的目录下。那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就会在这个列表的路径中查找静态文件。例如我们在manage.py的同级目录下新建一个static的文件夹。然后在settings.py:中添加STATICFILES_DIRS

STATICFILES_DIRS = [
 os.path.join(BASE_DIR,"static")
]

注:第三种和第四种方法都可以加载静态文件,我的个人习惯是在manage.py的同级目录下新建一个static文件夹,然后将所有的静态文件进行分类的在里面存储。而不去app中新建一个static的文件夹。但这只是我的个人习惯。毕竟不管是黑猫白猫,能抓到老鼠的就是好猫,所以只要我们能把项目做出来能运行,并且代码结构有逻辑性、层次感就行了。

在模版中使用load标签加载static标签。比如要加载在项目的static文件夹下的style.css的文件。那么示例代码如下:

{% load static %}

<link rel="stylesheet" href="{% static 'style.css' %}" rel="external nofollow" >

注意: {% load static %}需要放在html的头部位置(至少在使用static标签的上面),一般都是放在html的最上面。如果{% extend %}标签和{% load static %}同时存在,{% extend %}需要放在最上面,然后再放{% load static %}等标签。

如果不想每次在模版中加载静态文件都使用load加载static标签,那么可以在settings.py中的TEMPLATES/OPTIONS添加'builtins':[‘django.templatetags.static'],这样以后在模版中就可以直接使用static标签,而不用手动的load了。

注意: 位置不要添加错误了

TEMPLATES = [
 {
  'BACKEND': 'django.template.backends.django.DjangoTemplates',
  'DIRS': [os.path.join(BASE_DIR, 'templates')]
  ,
  'APP_DIRS': True,
  'OPTIONS': {
   'context_processors': [
    'django.template.context_processors.debug',
    'django.template.context_processors.request',
    'django.contrib.auth.context_processors.auth',
    'django.contrib.messages.context_processors.messages',
   ],
   #添加在这个位置
   'builtins' : [
    'django.templatetags.static'
   ],
  },
 },
]

下面的不常用,但是可以了解一下。

如果没有在settings.INSTALLED_APPS中添加django.contrib.staticfiles。那么我们就需要手动的将请求静态文件的url与静态文件的路径进行映射了。示例代码如下:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
 # 其他的url映射
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

但平时我们并不会用到这个,Django内置已经将django.contrib.staticfiles添加进去了的,我们为什么要给他删除来自找麻烦呢?放在这里也只是提供一个参考,了解一下。

最后分享一个快捷键的使用:在我们写项目的时候,有时候修改了代码而没有效果,这是因为浏览器使用的缓存加载,这个时候我们就可以使用这个快捷键来不使用缓存加载一个文件,来达到查看修改代码之后的效果的目地。

ctrl+shift+r 不使用缓存加载一个文件

以上这篇Python Django中的STATIC_URL 设置和使用方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python读取word文档的方法
May 09 Python
python判断一个集合是否包含了另外一个集合中所有项的方法
Jun 30 Python
举例区分Python中的浅复制与深复制
Jul 02 Python
Python输入二维数组方法
Apr 13 Python
redis之django-redis的简单缓存使用
Jun 07 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
python re正则匹配网页中图片url地址的方法
Dec 20 Python
python+selenium实现QQ邮箱自动发送功能
Jan 23 Python
Django Rest framework三种分页方式详解
Jul 26 Python
python使用writerows写csv文件产生多余空行的处理方法
Aug 01 Python
Python queue队列原理与应用案例分析
Sep 27 Python
tensorflow 模型权重导出实例
Jan 24 Python
Python爬虫爬取、解析数据操作示例
Mar 27 #Python
python opencv进行图像拼接
Mar 27 #Python
Python爬虫爬取电影票房数据及图表展示操作示例
Mar 27 #Python
Pyspark读取parquet数据过程解析
Mar 27 #Python
Python基于pyecharts实现关联图绘制
Mar 27 #Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 #Python
Django添加bootstrap框架时无法加载静态文件的解决方式
Mar 27 #Python
You might like
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
php操作mongoDB实例分析
2014/12/29 PHP
PHP MPDF中文乱码的解决方式
2015/12/08 PHP
PHP中FTP相关函数小结
2016/07/15 PHP
javascript下操作css的float属性的特殊写法
2007/08/22 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
写自已的js类库需要的核心代码
2012/07/16 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
jQuery读取XML文件的方法示例
2017/02/03 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
详解webpack之图片引入-增强的file-loader:url-loader
2018/10/08 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
JS实现普通轮播图特效
2020/01/01 Javascript
详细分析vue表单数据的绑定
2020/07/20 Javascript
[01:03]悬念揭晓 11月26日DOTA2完美盛典不见不散
2017/11/23 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
用python与文件进行交互的方法
2018/03/01 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python @propert装饰器使用方法原理解析
2019/12/25 Python
Python参数传递及收集机制原理解析
2020/06/05 Python
HTML5 Geolocation API的正确使用方法
2018/12/04 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
最新教师自我评价分享
2013/11/12 职场文书
优秀员工表扬信
2014/01/17 职场文书
小学生打架检讨书
2014/01/26 职场文书
社区中秋节活动方案
2014/01/29 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
校园安全学习心得体会
2016/01/18 职场文书