一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)
一、变量
- '''
- 1.视图函数可以通过两种方式将变量传递给模板页面
- -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量keyn': '变量值n'})
- -- render(request, 'test_page.html', locals())
- # locals() 就是将视图函数中的所有变量都传递给模板页面
- 2.模板页面中对变量的使用
- def dtl(request):
- num = 3.14
- ss = '大碗宽面'
- # return render(request, 'django_dtl.html', {'number': num, 'ss': ss})
- #上述方法必须用key取值
- result = True
- list = [1, 2, 3, 4, 5]
- dic = {'name': 'henry', 'age': 24}
- # 函数不能带有参数,模板中{{ fn }} 本质就是调用函数拿到函数值(函数的返回值)
- def fn():
- return "fn function"
- class Person:
- name = "henry"
- def __str__(self):
- return "这是Person类"
- p = Person()
- # locals()存放当前作用域中所有的名字
- return render(request, 'django_dtl.html', locals())
- '''
- '''
- <li>{{ num }}</li> #3.14
- <li>{{ list }} -- {{ list.0 }}</li> #[1, 2, 3, 4, 5] -- 1
- <li>{{ dic }} -- {{ dic.age }}</li> #{'name': 'henry', 'age': 24} -- 24
- <li>{{ fn }}</li> #fn function
- <li>{{ Person }} -- {{ Person.name }}</li>
- # Person => Person() => __str__的返回值 Person.name = "henry"
- <li>{{ 123 }}</li> # 也可以直接写数字、字符串、布尔值
- '''
二、过滤器(filter)
- '''
- 1.语法:
- -- {{ 变量|过滤器1[[:参数]|...|过滤器n[:参数]] }}
- -- 注:过滤器可以串联操作,可以拥有0个或1个参数
- 2.常见内置filter
- -- 增加 add:num #{{ num |add:1|add:2 }}
- -- 字符串长度 length #{{ ss|length }}
- -- 默认值 default:'默认值'
- # {{ number|default:"number不存在或值为False" }} 变量不存在或值为False,会返回number的默认值,否则返回number本身的值
- -- 全大写 upper #{{ 'Abc'|upper }} 结果:ABC
- -- 全小写 lower #{{ 'Abc'|lower }} 结果:abc
- -- 切片 slice:'1:-1' #{{ '123456789'|slice:'1:-1' }} 结果:2345678
- -- 将数字转换为文件大小 filesizeformat
- #file_size=1024
- #<li>{{ file_size|filesizeformat}}</li> 结果:1.0kb
- #file_size = 1024*1024
- #<li>{{ file_size|filesizeformat}}</li> 结果:1.0 MB
- -- 字符串隐藏 truncatechars:13 # 只显示10个字符,后置字符都用...来替代
- #<li>{{ '123456789'|truncatechars:5 }}</li> 结果:12...
- -- 时间 date:'Y-m-d'
- #time = datetime.datetime.now()
- #print(time) 结果:2019-03-01 18:58:00.597804
- # <li>{{ time }}</li> 结果:March 1, 2019, 6:58 p.m.
- #<li>{{ time|date:'Y-m-d' }}</li> 结果:2019-03-01
- -- 转换原意 safe
- #<li>{{ time|safe }}</li> 结果:2019-03-01 18:58:00.597804
- #link = '<a href="https://www.baidu.com/">link</a>'
- #<li>{{ link }}</li> 结果:<a href="https://www.baidu.com/">link</a>
- #<li>{{ link|safe }}</li> 结果:link 一个可以点击跳转的连接
- '''
三、标签(tag)
- '''
- 1.语法:
- -- {% 关键词 arg1 ... argn %}
- 2.常用:
- -- 反向解析url {% url 'namespace:url_name' arg1 arg2 %}
- eg: url(r'test/(\d+)/(\d+)/(\d+)/$', views.dtl, name='test')
- {% url 'test' 1 2 3 %} => /test/1/2/3/
- -- 当前时间now {% now 'Y-m-d' %}
- eg:<li>{% now 'Y-m-d' %}</li> => 2019-03-01
- -- 起别名with {% with '后面的别名flag就代表我' as flag %} {{ flag }} {% endwith %}
- eg:link = '<a href="https://www.baidu.com/">link</a>'
- {% with link|safe as lk %}
- {{ lk }}
- {{ lk }}
- {{ lk }}
- {% endwith %}
- =>link link link
- {% with '123456789' as n %}
- {{ n }}
- {{ n }}
- {{ n }}
- {% endwith %}
- =>123456789 123456789 123456789
- {% with '123456789' as n %} 相当于 {% with n='123456789 %} n与=之间不能有空格
- -- Django CSRF认证 {% csrf_token %}
- #该页面为Django自身渲染, 渲染时告诉页面自身的认证条件,该页面发送post请求都可以通过认证
- 有了这行代码我们就可以不用注销中间件中的csrf认证,从而达到发送post请求的效果
- '''
四、条件分支tag
- '''
- 语法:
- {% if 条件1 %}
- 结论1
- {% elif 条件2 %}
- 结论2
- {% else %}
- 结论n
- {% endif %}
- 注:
- 1. if的条件可以添加filter
- 2. 可以嵌套
- eg:
- {% with 9|add:1 as num %}
- {% if num > 10 %}
- <p>num值大于10</p>
- {% elif num == 10 %}
- <p>num值等于10</p>
- {% else %}
- {% if num > 5 %}
- <p>num介于5与10</p>
- {% else %}
- <p>num不大于5</p>
- {% endif %}
- {% endif %}
- {% endwith %}
- =>num值等于10
- '''
五、迭代器tag
- '''
- {% for foo in iterate %}
- {{ forloop }}
- {% empty %}
- 可迭代对象为空
- {% endfor %}
- 注:
- 1. iterate为可迭代对象
- 2. iterate可以添加filter
- 3. forloop变量为存放迭代信息的字典
- {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False}
- 父级forloop字典,开始索引从0编号或1编号,倒序索引从0编号或1编号,是否是第一次或最后一次循环
- 4. empty分支会在可迭代对象不存在或空时执行
- eg: {% for n in 31425|make_list %}
- <p>{{ forloop }}</p>
- <p>第{{ forloop.counter }}次迭代</p>
- <p>{{ n }}</p>
- <hr>
- {% endfor %}
- eg:ll = [[1, 2, 3], [4, 5, 6]]
- {% for l in ll %}
- {% for n in l %}
- <p>外层{{ forloop.parentloop.counter }} - 内层{{ forloop.counter }}</p>
- {{ n }}
- <hr>
- {% endfor %}
- {% empty %}
- <p>迭代的ll不存在或为空</p>
- {% endfor %}
- 外层1 - 内层1
- 1
- 外层1 - 内层2
- 2
- 外层1 - 内层3
- 3
- 外层2 - 内层1
- 4
- 外层2 - 内层2
- 5
- 外层2 - 内层3
- 6
- '''
六、自定义过滤器与标签
- '''
- 步骤:
- 1. 在注册的app下创建templatetags包
- 2. 在模板中自定义模块py文件,如:owen_tags.py
- 3. 要在使用自定义filter与tag的模板页面中加载自定义模块py文件,案例:{% load owen_tags %}
- 4. 自定义filter语法
- from django.template import Library
- register = Library()
- @register.filter(name='jump')
- def owen_jump(value, arg):
- try:
- return value * int(arg)
- except (ValueError, TypeError):
- return ''
- 5. 自定义tag语法
- @register.simple_tag(name='add_two')
- def owen_add(arg1, arg2):
- try:
- return int(arg1) + int(arg2)
- except (ValueError, TypeError):
- try:
- return arg1 + arg2
- except Exception:
- return ''
- 6. 在加载了自定义模块py文件的模板页面中使用,案例:
- {{ 10|jump:2}} # 10 * 2 =>20
- {{ 'a'|jump:3 }} #'a'*3 => 'aaa'
- {% add_two 10 20 %} # 10 + 20 =>30
- {% add_two 'hello' 'world' %} # 'hello'+'world' =>'helloworld'
- {% add_two 10 'dollor' %} #没有返回值,不是同类型,无法相加
- '''
七、全系统过滤器(了解)
- {{ 123|add:"" }} 给value加上一个数值
- {{ "AB'CD"|addslashes }} 单引号加上转义号,一般用于输出到javascript中
- {{ "abcd"|capfirst }} 第一个字母大写
- {{ "abcd"|center:"" }} 输出指定长度的字符串,并把值对中
- {{ "123spam456spam789"|cut:"spam" }} 查找删除指定字符串
- {{ value|date:"F j, Y" }} 格式化日期
- {{ value|default:"(N/A)" }} 值不存在,使用指定值
- {{ value|default_if_none:"(N/A)" }} 值是None,使用指定值
- {{ 列表变量|dictsort:"数字" }} 排序从小到大
- {{ 列表变量|dictsortreversed:"数字" }} 排序从大到小
- {{ string|escape }} 转换为html实体
- {{ 21984124|filesizeformat }} 以1024为基数,计算最大值,保留1位小数,增加可读性
- {{ list|first }} 返回列表第一个元素
- {{ "ik23hr&jqwh"|fix_ampersands }} &转为&
- {{ 13.414121241|floatformat }} 保留1位小数,可为负数,几种形式
- {{ 13.414121241|floatformat:"" }} 保留2位小数
- {{ 23456 |get_digit:"" }} 从个位数开始截取指定位置的1个数字
- {{ list|join:", " }} 用指定分隔符连接列表
- {{ list|length }} 返回列表个数
- {% if 列表|length_is:"" %} 列表个数是否指定数值
- {{ "ABCD"|linebreaks }} 用新行用
- {{ "ABCD"|linebreaksbr }} 用新行用 标记包裹
- {{ 变量|linenumbers }} 为变量中每一行加上行号
- {{ "abcd"|ljust:"" }} 把字符串在指定宽度中对左,其它用空格填充
- {{ "ABCD"|lower }} 小写
- {{ "abcdefghijklmnopqrstuvwxyz"|phone2numeric }} 把字符转为可以对应的数字??
- {{ 列表或数字|pluralize }} 单词的复数形式,如列表字符串个数大于1,返回s,否则返回空串
- {{ 列表或数字|pluralize:"es" }} 指定es
- {{ 列表或数字|pluralize:"y,ies" }} 指定ies替换为y
- {{ object|pprint }} 显示一个对象的值
- {{ 列表|random }} 返回列表的随机一项
- {{ string|removetags:"br p div" }} 删除字符串中指定html标记
- {{ string|rjust:"" }} 把字符串在指定宽度中对右,其它用空格填充
- {{ 列表|slice:":2" }} 切片
- {{ string|slugify }} 字符串中留下减号和下划线,其它符号删除,空格用减号替换
- {{ 3|stringformat:"02i" }} 字符串格式,使用Python的字符串格式语法
- {{ "EABCD"|striptags }} 剥去[X]HTML语法标记
- {{ 时间变量|time:"P" }} 日期的时间部分格式
- {{ datetime|timesince }} 给定日期到现在过去了多少时间
- {{ datetime|timesince:"other_datetime" }} 两日期间过去了多少时间
- {{ datetime|timeuntil }} 给定日期到现在过去了多少时间,与上面的区别在于2日期的前后位置。
- {{ datetime|timeuntil:"other_datetime" }} 两日期间过去了多少时间
- {{ "abdsadf"|title }} 首字母大写
- {{ "A B C D E F"|truncatewords:"" }} 截取指定个数的单词
- {{ ""|truncatewords_html:"" }} 截取指定个数的html标记,并补完整
- {{ list|unordered_list }} 多重嵌套列表展现为html的无序列表
- {{ string|upper }} 全部大写
- {{ string|urlize }} 将URLs由纯文本变为可点击的链接。(没有实验成功)
- {{ string|urlizetrunc:"" }} 同上,多个截取字符数。(同样没有实验成功)
- {{ "B C D E F"|wordcount }} 单词数
- {{ "a b c d e f g h i j k"|wordwrap:"" }} 每指定数量的字符就插入回车符
- {{ boolean|yesno:"Yes,No,Perhaps" }} 对三种值的返回字符串,对应是 非空,空,None
一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)的更多相关文章
- margin标记可以带一个、二个、三个、四个参数,各有不同的含义。
margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上.下.左.右各20px.) margin: 20px 40px;(上.下20px:左.右40px.) ...
- { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型
MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...
- 一.rest-framework之版本控制 二、Django缓存 三、跨域问题 四、drf分页器 五、响应器 六、url控制器
一.rest-framework之版本控制 1.作用 用于版本的控制 2.内置的版本控制 from rest_framework.versioning import QueryParameterVer ...
- Java单元测试工具:JUnit4(一)(二)(三)(四)
Java单元测试工具:JUnit4(一)--概述及简单例子 Java单元测试工具:JUnit4(二)--JUnit使用详解 Java单元测试工具:JUnit4(三)--JUnit详解之运行流程及常用注 ...
- 【Linux网络基础】TCP/IP协议簇的详细介绍(三次握手四次断开,11种状态)
一.TCP/IP协议簇(DoD参考模型) 用于简化OSI层次,以及相关的标准. 传输控制协议(tcp/ip)簇是相关国防部DoD所创建的,主要用来确保数据的完整性以及在毁灭性战争中维持通信 是由一组不 ...
- Java Spring Boot VS .NetCore (二)实现一个过滤器Filter
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- JavaWeb学习笔记(二十二)—— 过滤器filter
一.什么是过滤器 过滤器filter是JavaWeb三大组件之一,它与Servlet很相似!不过过滤器是用来拦截请求的,而不是处理请求的.WEB开发人员通过Filter技术,对web服务器管理的所有w ...
- 三种实现日志过滤器的方式 (过滤器 (Filter)、拦截器(Interceptors)和切面(Aspect))
1.建立RequestWrapper类 import com.g2.order.server.utils.HttpHelper; import java.io.BufferedReader; impo ...
- Filter学习(二)Filter使用Decorator设计模式
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...
随机推荐
- (已解决)iOS真机运行 Xcode报错(libpng error: CgBI: unhandled critical chunk)
Cocos2d-x加载图片资源出现libpng error: CgBI: unhandled critical chunk Xcode7.3 设置Remove Text Metadata From P ...
- php 下载完成后删除文件
最近遇到一个需求:下载用户上传的图片,但是图片不断更新. 1.需要将图片从图片服务器下载到网站后台服务器 2.压缩文件夹生成zip压缩包 3.下载压缩包 4.删除压缩包和临时文件夹 其中遇到了一个问题 ...
- 解决React Native使用Fetch API请求网络报Network request failed
问题来源: 1 . 在测试fetch数据请求时,Xcode9.0以上的无法请求https, 需要在Xcode中加载项目后修改Info.plist的相关配置,具体如下参考 问题及解决方法一模一样,不再重 ...
- LeetCode83.删除排序链表中的重复的元素
给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...
- vue搭建环境并创建项目
1.>npm install @vue/cli -g 2.创建项目A a.>vue ui b.在弹出的管理界面创建项目 或 a.npm install -g @vue/cli-init b ...
- 4.构造Thread对象你也许不知道的几件事
1.Thread类对象只有在调用了start()方法之后,JVM虚拟机才会给我们创建一个真正的线程!否则就不能说是创建了线程!也就是说new Thread()之后,此时实际上在计算机底层,操作系统实际 ...
- Mysql事务及锁
一.事务(Transaction)及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性:1.原子性(Atomicity):事务是一个原子操作单 ...
- EXTENDED LIGHTS OUT (高斯消元)
In an extended version of the game Lights Out, is a puzzle with 5 rows of 6 buttons each (the actual ...
- Python大神成长之路: 第三次学习记录 集合 函数 装饰 re
学习记录day03 字符串可以直接切片,But字符串不可修改 字符串修改:生成了一个新的字符串 LIst修改,在原基础上修改(原内存上) 集合是一个无序的,不重复的数据组合,它的主要作用如 ...
- django之路由分析
URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表. URLconf配置 基本格式: from django.conf.urls i ...