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 ...
随机推荐
- 20162319 实验四 Android程序设计
Android Stuidio的安装测试: 完成Hello World, 要求修改res目录中的内容,Hello World后要显示自己的学号 ·实验过程 完成任务一,只需在Android应用程序文件 ...
- pycharm 2017注册码
1.在浏览器的地址栏输入:http://idea.lanyus.com/,该网址,无需修改用户名,点击获取注册码.复制该注册码,粘贴在注册界面的Activation code的输入框中,点击 ok 该 ...
- Class 2 四则运算2的设计思路
设计思路 1.主函数中有一个大的for循环,用户可以一直随机得到相应题目.在嵌套一个循环,其可以直接确定题目数量:定义两个变量,分别作为四则运算的两个运算数,用随机数函数得到两个数值:再利用随机生成函 ...
- 重学 以太网的mac协议的CSMA/CD
之前上课一直模糊的CSMA/CD进行系统性整理. CSMA/CD (Carrier Sense Multiple Acess/Collision Detect)应用在OSI的 数据链路层 在以太网中, ...
- C#编程之神奇程序找数
C#编程之神奇程序找数 问题1:这个程序要找的是符合什么条件的数? 问题2:这样的数存在么?符合这一条件的最小的数是什么? 问题3:在电脑上运行这一程序,你估计多长时间才能输出第一个结果?时间精确到分 ...
- Java 经典 书籍
1.<你的灯还亮着么> 方法论 2.<程序员修炼之道 从小工到专家> 方法论 3.<发布!软件的设计与部署> 案例&经验总结 4.<思考,快与慢> ...
- Java中DAO的实现
J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与高级别的业务逻辑分离.实现 DAO 模式涉及比编写数据访问代码更多的内容.在本文 ...
- ini_set的权限大于error_reporting
在用php做网站开发的时候 , 为防止用户看到错误信息,而出现的不友好界面.故一般性会在php.ini里设置:display_errors = Off;不过在开发的时候,我们有时候需要打开错误信息.这 ...
- Windows下 OpenSSL的安装与简单使用
1. openssl的最新版本 最新版本是 openssl1.1.1 官方地址 https://www.openssl.org/source/ TLS1.3的协议(RFC8446)在2018.8.12 ...
- [转帖]“剖开” LinuxONE 和 Exadata,架构专家解读里面到底有什么
“剖开” LinuxONE 和 Exadata,架构专家解读里面到底有什么 http://server.zhiding.cn/server/2018/0914/3111044.shtml 说起I ...