一、变量.二、过滤器(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对象进行包装,再把包装对象传给目 ...
随机推荐
- asp.net拦截器
一 拦截器又称过滤器. asp.net mvc本身是自带3种拦截器:Action拦截器.Result拦截器.Exception拦截器. 应用中常见的拦截器有日志拦截器(Action拦截器)和异常处理拦 ...
- FCN的理解
FCN特点 1.卷积化 即是将普通的分类网络丢弃全连接层,换上对应的卷积层即可 2.上采样 方法是双线性上采样差 此处的上采样即是反卷积3.因为如果将全卷积之后的结果直接上采样得到的结果是很粗糙的,所 ...
- oracle 常用(二)
多表查询: 1.等值连接查询: select a.aa,a.bb,b.qq from XX a , CC b where a.aa= b.ee 2.不等值连接: select * fr ...
- JavaScript学习笔记之call和apply
前端的知识面太广了,想要记住所有知识点是不可能的,所以将这些学过的记录下来,随时都可以翻开来参考 1.call方法 调用一个对象的一个方法,call(this, arg1, arg2,argN);用来 ...
- LeetCode141.环形链表
给定一个链表,判断链表中是否有环. 进阶:你能否不使用额外空间解决此题? /** * Definition for singly-linked list. * class ListNode { * i ...
- Bootstrap-全局CSS样式-图片样式
Bootstrap第二部分:全局CSS样式-图片样式.img-rounded 圆角图片.img-circle 圆形图片.img-thumbnail 缩略图片.img-responsive响应 ...
- vm虚拟机出现Disk启动失败
https://jingyan.baidu.com/article/a501d80c0e45b8ec630f5ed6.html
- hdu5441 并查集+克鲁斯卡尔算法
这题计算 一张图上 能走的 点对有多少个 对于每个限制边权 , 对每条边排序,对每个查询排序 然后边做克鲁斯卡尔算法 的时候变计算就好了 #include <iostream> #inc ...
- eclipse更换workspace需要重新设置的内容
.jdk Window-->java-->Installed JREs,新增或修改你所需要的jdk版本,点击需要的jdk-->edit 在Default VM arguments里面 ...
- RabbitMQ CentOS6.5 安装
1.安装前准备工作 1)安装RbbitMQ之前先安装ErLang 2)安装ErLang之前需要安装最新的socat 3)安装方式有多种,可以下包安装,可以直接下载rpm文件安装,推荐前者. 4)安装的 ...