对Django中static(静态)文件详解以及{% static %}标签的使用方法


Posted in Python onJuly 28, 2019

在一个网页中,不仅仅只有一个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 不使用缓存加载一个文件

以上这篇对Django中static(静态)文件详解以及{% static %}标签的使用方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
最基础的Python的socket编程入门教程
Apr 23 Python
Python连接MySQL并使用fetchall()方法过滤特殊字符
Mar 13 Python
Python实现字符串逆序输出功能示例
Jun 24 Python
python笔记:mysql、redis操作方法
Jun 28 Python
浅谈python装饰器探究与参数的领取
Dec 01 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python assert语句的简单使用示例
Jul 28 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
Aug 28 Python
django中media媒体路径设置的步骤
Nov 15 Python
django框架cookie和session用法实例详解
Dec 10 Python
TensorFlow——Checkpoint为模型添加检查点的实例
Jan 21 Python
python实现音乐播放器 python实现花框音乐盒子
Feb 25 Python
解决Django Static内容不能加载显示的问题
Jul 28 #Python
基于Django静态资源部署404的解决方法
Jul 28 #Python
Python占用的内存优化教程
Jul 28 #Python
解决Django加载静态资源失败的问题
Jul 28 #Python
django之静态文件 django 2.0 在网页中显示图片的例子
Jul 28 #Python
python正则-re的用法详解
Jul 28 #Python
django ModelForm修改显示缩略图 imagefield类型的实例
Jul 28 #Python
You might like
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php 无限分类的树类代码
2009/12/03 PHP
PHP实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
获取页面高度,窗口高度,滚动条高度等参数值getPageSize,getPageScroll
2006/09/22 Javascript
Jquery 学习笔记(一)
2009/10/13 Javascript
IE6下出现JavaScript未结束的字符串常量错误的解决方法
2010/11/21 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
javascript设置连续两次点击按钮时间间隔的方法
2014/10/28 Javascript
JavaScript与HTML的结合方法详解
2015/11/23 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
为什么我们要做三份 Webpack 配置文件
2017/09/18 Javascript
用WebStorm进行Angularjs 2开发(环境篇:Windows 10,Angular-cli方式)
2018/12/05 Javascript
使用Python保存网页上的图片或者保存页面为截图
2016/03/05 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
python获取磁盘号下盘符步骤详解
2019/06/19 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
Python函数调用追踪实现代码
2020/11/27 Python
VLAN和VPN有什么区别?分别实现在OSI的第几层?
2014/12/23 面试题
土木工程应届生自荐信
2013/09/24 职场文书
汉语言文学毕业生求职信
2013/10/01 职场文书
自我评价怎么写好呢?
2013/12/05 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
电焊工工作岗位职责
2014/02/06 职场文书
教师师德师风整改措施
2014/10/24 职场文书
公司处罚决定书
2015/06/24 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
python 爬取吉首大学网站成绩单
2021/06/02 Python
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技