django中模板变量与内置标签以及过滤器
本文参考 官方文档 。
一 模板变量
格式: {{ variable_name }}
variable_name 命名规则与变量命名规则类似,允许字符数字下划线,不允许标点。
variable_name后面可以跟dot . 以此来访问变量的属性。查询顺序:
字典查询
属性或者方法查询: 若为方法查询,则要求该方法不需要传入任何参数(且该方法的圆括号要省略)。
调用该方法后,会将该方法返回的结果赋予该变量。
数字索引查询
二 内置标签
格式: {% tag %}
1 block 定义一个可以被子模板覆盖的区域。
- {% block block_name %}
- 该文本可被替换
- {% endblock %} <--结束标签
2 comment 注释标签。模板引擎会忽略掉 {% comment %} 和 {% endcomment %} 之间的所有内容。
3 csrf_token 用来CSRF保护的标签,详情请阅读 官方文档。
4 cycle 循环使用标签中给出的参数(可以是字符串),参数被耗尽时,则重新开始循环,支持 as 关键字。
- {% for o in some_list %}
- <tr class="{% cycle 'row1' 'row2' %}">
- ...
- </tr>
- {% endfor %}
实例
5 autoescape 控制标签内容是否被 转义 。值为 on/off。如果开启自动转义的话,标签会被过滤掉,比如:
< 小于号被过滤为 : <
> 大于号被过滤为 : >
- {% for o in some_list %}
- <tr class="{% autoescape off %}{% cycle rowvalue1 rowvalue2 %}{% endautoescape %}">
- ...
- </tr>
- {% endfor %}
6 debug 输出完整的调试信息,包含上下文以及导入的模块
7 extends 使用该标签在模板中继承某个模板。用法:
{% extends 'parent.html' %} 或者:
{% extends variable %}
在django1.10中可以使用相对路径了, ‘ . ’表示当前目录, ‘ .. ‘表示当前目录的父目录
8 filter 使用一个或者多个过滤器过滤某个块的内容,可以使用管道符号 | 连接多个过滤器。过滤器也可以有参数。
- {% filter force_escape|lower %}
- This text will be HTML-escaped, and will appear in all lowercase.
- {% endfilter %}
9 firstof 输出第一个非False参数的值。在django1.9及以后支持 as 关键字。
- {% firstof var1 var2 var3 %}
- <!-- 相当于 -->
- {% if var1 %}
- {{ var1 }}
- {% elif var2 %}
- {{ var2 }}
- {% elif var3 %}
- {{ var3 }}
- {% endif %}
- <!-- 保底值 -->
- {% firstof var1 var2 var3 "fallback value" %}
- <!-- 关闭自动转义 -->
- {% autoescape off %}
- {% firstof var1 var2 var3 "<strong>fallback value</strong>" %}
- {% endautoescape %}
10 for 循环
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% endfor %}
- </ul>
- <!-- 遍历字典 -->
- {% for key, value in data.items %}
- {{ key }}: {{ value }}
- {% endfor %}
- forloop.counter The current iteration of the loop (1-indexed) 当前循环次数的整数计数器,从一开始计数
- forloop.counter0 The current iteration of the loop (0-indexed) .......从0开始计数
- forloop.revcounter The number of iterations from the end of the loop (1-indexed) 循环中剩余项的整数变量,最后一次执行时变为1
- forloop.revcounter0 The number of iterations from the end of the loop (0-indexed) ......变为0
- forloop.first True if this is the first time through the loop 若当前循环为第一次循环,该值为True
- forloop.last True if this is the last time through the loop ......为False
- forloop.parentloop For nested loops, this is the loop surrounding the current one .....指向当前循环的上一次循环的forloop
for ... empty
- <ul>
- {% for athlete in athlete_list %}
- <li>{{ athlete.name }}</li>
- {% empty %}
- <li>Sorry, no athletes in this list.</li>
- {% endfor %}
- </ul>
11 if...elif...else
1 支持 and or not,且and和or可以联用。但and的优先级高于or
- {% if athlete_list and coach_list or cheerleader_list %}
- <!-- 解释为 -->
- if (athlete_list and coach_list) or cheerleader_list
2 if标签中不允许使用 () ,可以依靠嵌套if来实现
3 if标签中的条件判断语句有 == , != , > , < , >= , <= , in , not in , is , not is 。 is和not is是django1.10中的新特性。
4 if标签中可以使用过滤器
5 if标签衍生出了ifequal和ifnotequal,{% ifequal a b %} 等于 {% if a==b %}
12 ifchange 检查循环中的某个值在最近一次循环时是否改变。可以使用 else 标签。用法有两个:
1 它会把要渲染的内容与前一次作比较,发生变化时才显示它。
- <h1>Archive for {{ year }}</h1>
- {% for date in days %}
- {% ifchanged %}<h3>{{ date|date:"F" }}</h3>{% endifchanged %}
- <a href="{{ date|date:"M/d"|lower }}/">{{ date|date:"j" }}</a>
- {% endfor %}
显示日期列表,当月份改变时才显示
2 如果给的是一个或者多个变量,就会检查其中任一个变量是否发生改变。
- {% for date in days %}
- {% ifchanged date.date %} {{ date.date }} {% endifchanged %}
- {% ifchanged date.hour date.date %}
- {{ date.hour }}
- {% endifchanged %}
- {% endfor %}
日期每一次变动都会显示日期,并且日期或者小时中的任何一个变动就会显示小时
13 include 加载一个模板,并使用当前的context上下文渲染它。在一个模板中包含其他模板的一种方法。
用法: {% include 'polls/index.html' %}
django1.10中可以使用相对路径。
14 load 装载一个自定义的模板标签集合,详细信息请看 官方文档 。
15 now 根据指定的格式显示当前的日期或者时间
- 格式字符串 描述 示例输出
- a 'a.m.' 或者 'p.m.' 。(这与PHP中的输出略有不同,因为为了匹配美联社风格,它包含了句点。 'a.m.'
- A 'AM' 或者 'PM' 。 'AM'
- b 月份,文字式的,三个字母,小写。 'jan'
- d 一月的第几天,两位数字,带前导零。 '01' 到 '31'
- D 一周的第几天,文字式的,三个字母。 'Fri'
- f 时间,12小时制的小时和分钟数,如果分钟数为零则不显示。 '1' , '1:30'
- F 月份,文字式的,全名。 'January'
- g 小时,12小时制,没有前导零。 '1' 到 '12'
- G 小时,24小时制,没有前导零。 '0' 到 '23'
- h 小时,12小时制。 '01' 到 '12'
- H 小时,24小时制。 '00' 到 '23'
- i 分钟。 '00' 到 '59'
- j 一月的第几天,不带前导零。 '1' 到 '31'
- l 一周的第几天,文字式的,全名。 'Friday'
- L 是否为闰年的布尔值。 True 到 False
- m 月份,两位数字,带前导零。 '01' 到 '12'
- M 月份,文字式的,三个字母。 'Jan'
- n 月份,没有前导零。 '1' 到 '12'
- N 美联社风格的月份缩写。 'Jan.' , 'Feb.' ,'March' , 'May'
- O 与格林威治标准时间的时间差(以小时计)。 '+0200'
- P 时间,12小时制的小时分钟数以及a.m./p.m.,分钟数如果为零则不显示,用字符串表示特殊时间点,如 'midnight' 和 'noon' 。 '1 a.m.' , '1:30 p.m.' ,'midnight' ,'noon' , '12:30 p.m.'
- r RFC 822 格式的日期。 'Thu, 21 Dec 2000 16:01:07 +0200'
- s 秒数,两位数字,带前导零。 '00' 到 '59'
- S 英语序数后缀,用于表示一个月的第几天,两个字母。 'st' , 'nd' , 'rd'到 'th'
- t 指定月份的天数。 28 到 31
- T 本机的时区。 'EST' , 'MDT'
- w 一周的第几天,数字,带前导零。 '0' (Sunday) 到'6' (Saturday)
- W ISO-8601 一年中的第几周,一周从星期一开始。 1 , 23
- y 年份,两位数字。 '99'
- Y 年份,四位数字。 '1999'
- z 一年的第几天。 0 到 365
- Z 以秒计的时区偏移量,这个偏移量对于UTC西部时区总是负数,对于UTC东部时区总是正数。
格式
16 regrop 把一组相似的对象根据某个共有的属性重新分组。支持as关键字
- cities = [
- {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
- {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
- {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
- {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
- {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
- ]
# 若想按照如下格式显示
我们可以使用regroup标签
- {% regroup cities by country as country_list %}
- <ul>
- {% for country in country_list %}
- <li>{{ country.grouper }}
- <ul>
- {% for city in country.list %}
- <li>{{ city.name }}: {{ city.population }}</li>
- {% endfor %}
- </ul>
- </li>
- {% endfor %}
- </ul>
17 spaceless 去除html标签左右的空白符,不会去除标签内容中的空白符
18 url 返回一个不带域名的绝对路径引用。我们在URLconf中配置的url('pattern',view_function,name='url_name')中的name在这里就会
派上用场。支持as关键字
用法: {% url 'url_name' value1 value2.... %}
举例: 当我们URLconf文件中有这么一行: url(r'^hello/(?P<num>[0-9]{1})$',view.hello,name='hello')
对应的template文件内容为: {% url 'hello' num %}
当我们在浏览器中输入 localhost:8000/hello/2 时, 页面就会返回 /hello/2/
三 内置过滤器
一般用法:{{ value|filter:argu }}
多个过滤器可以链用:{{ valeu|filter01:argu1|filter02:argu2 }}
1 add 将argu添加至value中。
若value为4,argu为2,则输出6
若value为[1,2,3],argu为[4,5,6] 则输出[1,2,3,4,5,6]
2 addslashes 在引号前添加反斜线。用法: {{ value|addslashes }}
若value为"I'm mncu",则输出" I \'m mncu "
3 capfirst 首字母大写
4 center 给定一个长度,让字符串居中。{{ value|center:"15" }}
5 cut 删除value中所有的argu。若value为'hello world' argu为' ',则输出’helloworld'
6 date 将一个date类型根据指定的格式输出
- a 'a.m.' 或者 'p.m.' 。(这与PHP中的输出略有不同,因为为了匹配美联社风格,它包含了句点。 'a.m.'
- A 'AM' 或者 'PM' 。 'AM'
- b 月份,文字式的,三个字母,小写。 'jan'
- d 一月的第几天,两位数字,带前导零。 '01' 到 '31'
- D 一周的第几天,文字式的,三个字母。 'Fri'
- f 时间,12小时制的小时和分钟数,如果分钟数为零则不显示。 '1' , '1:30'
- F 月份,文字式的,全名。 'January'
- g 小时,12小时制,没有前导零。 '1' 到 '12'
- G 小时,24小时制,没有前导零。 '0' 到 '23'
- h 小时,12小时制。 '01' 到 '12'
- H 小时,24小时制。 '00' 到 '23'
- i 分钟。 '00' 到 '59'
- j 一月的第几天,不带前导零。 '1' 到 '31'
- l 一周的第几天,文字式的,全名。 'Friday'
- L 是否为闰年的布尔值。 True 到 False
- m 月份,两位数字,带前导零。 '01' 到 '12'
- M 月份,文字式的,三个字母。 'Jan'
- n 月份,没有前导零。 '1' 到 '12'
- N 美联社风格的月份缩写。 'Jan.' , 'Feb.' ,'March' , 'May'
- O 与格林威治标准时间的时间差(以小时计)。 '+0200'
- P 时间,12小时制的小时分钟数以及a.m./p.m.,分钟数如果为零则不显示,用字符串表示特殊时间点,如 'midnight' 和 'noon' 。 '1 a.m.' , '1:30 p.m.' ,'midnight' ,'noon' , '12:30 p.m.'
- r RFC 822 格式的日期。 'Thu, 21 Dec 2000 16:01:07 +0200'
- s 秒数,两位数字,带前导零。 '00' 到 '59'
- S 英语序数后缀,用于表示一个月的第几天,两个字母。 'st' , 'nd' , 'rd'到 'th'
- t 指定月份的天数。 28 到 31
- T 本机的时区。 'EST' , 'MDT'
- w 一周的第几天,数字,带前导零。 '0' (Sunday) 到'6' (Saturday)
- W ISO-8601 一年中的第几周,一周从星期一开始。 1 , 23
- y 年份,两位数字。 '99'
- Y 年份,四位数字。 '1999'
- z 一年的第几天。 0 到 365
- Z 以秒计的时区偏移量,这个偏移量对于UTC西部时区总是负数,对于UTC东部时区总是正数。 -43200 到
格式
- # 如果要显示 2016-8-8 8:08 这样的格式
- {{ datetime_instance|date:"Y-m-j G:i" }}
演示
7 default 若value的值为False,则使用argu作为默认值
8 default_if_none 只有当value的值为none时,才使用argu作为默认值。
9 dictsort 根据指定的argu对字典进行排序。value必须为字典类型
10 dictsortrevesed 逆序排序
11 escape 根据以下规则转义html字符串
- < is converted to <
- > is converted to >
- ' (single quote) is converted to '
- " (double quote) is converted to "
- & is converted to &
12 filesizeformat 将value转换为人类易读的文件尺寸。若value为123456789 ,则输出117.7MB
13 first 返回value的第一个元素
14 floatformat 若argu没有给出,则默认显示value的四舍五入后的保留一位小数的数字。value必须为数字。
15 get_digit value为数字,返回从右数第argu个数字。{{ value|get_digit:"2" }} 若value为1234567,则返回6
16 join 类似于Python中的str.join(list)
17 last 与first相反,返回value中最后一个元素
18 length 返回value的长度
19 length_is 若value的长度为argu,则返回True
20 linebreaks 将纯文本中的换行符转换为<br />和<p>
21 linenumbers 给value添加行号
22 ljust 根据给定的argu宽度的域内左对齐
23 lower 将value转换为小写
24 make_list 将value转换为list,若value为‘123’,则输出[1,2,3]
25 phone2numeric 将一个电话号码(可能包含字母)转化等价的数字值.比如: ‘800-COLLECT’ 将被转化为 ‘800-2655328’.
26 random 从value中随机挑选一个元素并返回
27 rjust 与ljust相反
28 safe 在django输出之前,不会对字符串进行转义。若使用多个过滤器,尽量将safe过滤器写在最后。
29 slice 返回value的片段,value必需为list。类似于Python中list中slice的语法。{{ some_list|slice:":2" }} 返回前两个元素
30 slugify 转化为小写, 移去非单词字符(字母数字和下划线),将空白转化为连字符,去除前后空白
31 stringformat 根据给定参数(一个格式字符串)格式化一个变量, 这个格式字符串使用 Python 字符串格式化语法,
例外之处是 “%” 运算符被省略.
32 striptags 过滤掉html标签
33 time 根据指定的argu格式,对time进行格式化
34 title 将给定的字符串value转化为标题类型的格式,也就是第一个单词的首字母大写,其余小写。
35 truncatechars 若字符串value的长度大于argu,则将大于的部分省略。
{{ value|truncatechars:9 }} 若value为 'joel is a slug' 则输出'joel i...'
36 upper 将value大写
37 wordcont 输出单词的个数(单词以空格区分)
django中模板变量与内置标签以及过滤器的更多相关文章
- ThinkPHP中的内置标签
ThinkPHP中的内置标签 1.内置标签分类 闭合标签 <tag></tag> 开放标签 <tag /> 2.包含文件标签 主要功能:实现对文件的包含(类似于re ...
- Thinkphp中的内置标签用法
Thinkphp中的内置标签有:Volist,Foreach,For,Switch,比较标签,范围判断标签,IF,Present,Empty,Defined,Assign,Define,标签嵌套,im ...
- Django内置标签
在Django中也提供了大量Django自带的内置标签来供我们使用.标签的写法与过滤器的写法不同,标签是具有开始和结束的,例如:{% if %}为开始标签,{% endif %}为结束标签. 可以查 ...
- JSP内置标签 JSP中JavaBean标签 JSP开发模式 EL和JSTL快速入门
2 JSP内置标签(美化+业务逻辑) 1)为了取代<%%>脚本形式,使用JSP标签/JSP动作,目的:与JSP页面的美化,即JSP面页都是由标签组成,不再有其它的内容 2)JSP内 ...
- django 内置标签
1.autoescape 自动转义开关 官网:https://docs.djangoproject.com/en/2.2/ref/templates/builtins/ 作用:将 html 内容解析成 ...
- ThinkPHP 模版中的内置标签
内置标签就是模版引擎提供的一组可以完成控制.循环和判断功能的类似HTML语法的标签. 一.判断比较: 1.if标签进行条件判断 //if语句的完整格式 <if condition=&qu ...
- thinkphp 内置标签volist 控制换行
thinkphp 内置标签volist 控制换行 volist标签通常用于查询数据集(select方法)的结果输出,通常模型的select方法返回的结果是一个二维数组,可以直接使用volist标签进行 ...
- JSP--JSP语法--指令---九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HTML标 ...
- JSP--JSP语法--指令--include(动态包含/静态包含)--九大隐式对象--四大域对象--JSP内置标签--JavaBean的动作元素--MVC三层架构
一.JSP 原理:JSP其实就是一个servlet. Servlet负责业务逻辑处理,JSP只负责显示.开发中,JSP中不能有一行JAVA代码 二.JSP语法 1. JSP模板元素:JSP中HT ...
随机推荐
- nodejs的Cannot find module 'body-parser'
http://blog.csdn.net/u014345860/article/details/77769253
- C++ 类的定义与实现
摘自这篇博客https://blog.csdn.net/xulingxin/article/details/81335030 一."类" 的介绍 在C++中, 用 &q ...
- Beta发布—视频展示
视频链接:http://v.youku.com/v_show/id_XMzE3ODQ0NjIzMg==.html视频简要内容介绍:1.一个小小的logo展示.2.在alpha的基础上,beta发布中增 ...
- 第十一次PSP
- Invalid bound statement (not found): com.example.managerdemo.mapper.SingleTableMapper.selectAllValuesByConditionsNoPage
报Invalid bound statement (not found): com.example.managerdemo.mapper.SingleTableMapper.selectAllValu ...
- 奔跑吧DKY——团队Scrum冲刺阶段博客汇总
第一周:团队展示 团队选题 需求规格说明书 第二周:完善需求规格说明书.制定团队编码规范.通过团队项目数据库设计 奔跑吧DKY--团队Scrum冲刺阶段-Day 1-领航 奔跑吧DKY--团队Scru ...
- win10系统下载-靠谱推荐
win10系统下载的靠谱推荐: 1.http://www.xitongtiandi.net/wenzhang/win10/12926.html 2.https://msdn.itellyou.cn/ ...
- 《UML大战需求分析》-读后感三
用例图是用来描述什么角色通过某某系统能做什么的图,用例图关注的是系统的外在表示想爱你.系统与人的交互系统与其他系统的交互,小人执行者就是角色,角色 是对系统使用者的抽象,一个角色可以代表多个具体的人而 ...
- C++自学及C的补缺
我这个寒假可以坐在电脑前的时间算是比较少的,因为我放假不久后就去打工了,而打工的时间是很流动的,所以我无法固定时间来学习,因此我只能根据我的打工时间来安排我的学习. 由于我的书是除夕前夕淘宝的,近期是 ...
- c++ imooc自学计划
一.视频学习相关的课程列表: C++远征之起航篇http://www.imooc.com/learn/342: C++远征之离港篇http://www.imooc.com/learn/381: C++ ...