html里面有模板语法的文件就叫做模板(模板:html + 模板语法)
官方文档:https://docs.djangoproject.com/zh-hans/2.2/ref/templates/builtins/
模板语法
一、模板语法之变量:语法为 {{变量名}}
1)变量名由数字和下划线组成
2)点(.)在模板语言中有特殊的含义,用来获取对象的相应属性值
3)templates引擎遇到(.)的时候,会按照如下顺序查找
字典查找,例如:foo['bar']
属性查找,例如:foo.bar
方法查找,例如:foo.bar()
list-index查找,例如:foo[bar]
二、模板语法之标签:语法为 {%模板标签%}
1.for 标签
1)正向迭代:
{% for 元素 in 可迭代对象 %} {{元素}} {% endfor %}
{% for 元素 in 可迭代对象 %} {{元素.属性}} {% endfor %}
2)反向迭代
{% for 元素 in 可迭代对象 reversed%} {{元素.属性}} {% endfor %}
3)对二元组解包
{% for x,y in points %} <p>There is a point at {{x}},{{y}}</p> {% endfor %}
4)字典解包
{% for key,value in data.items %} {{key}}:{{value}} {% endfor %}
5)判断列表是否为空(相当于组合使用if和for标签,empty即表示如果为空时则执行xxx)
{% for 元素 in 可迭代对象 %} <p>{{元素.属性}}</p> {% empty %} <p>空元素</p> {% endfor %}
6)for标签内部模板变量forloop
{% for item in 可迭代对象 %}
{{forloop.counter}} <!--默认从1开始计数-->
{{forloop.counter0} <!--表示从0开始计数-->
{{forloop.recounter} <!--反向下标值,从1开始计数-->
{{forloop.recounter0}} <!--反向下标值,从0开始计数-->
{{forloop.first}}:{{item}} <!--#判断是否是第一个元素-->
{{forloop.last}}:{{item}} <!--#判断是否是最后一个元素-->
{% endfor %}
2.if 标签
{% if 条件表达式1 %} {% elif 条件表达式2 %} {% else %} {% endif %}
3.ifequal / ifnotequal 标签
{% ifequal %}{% else 变量 %}{% endifequal %}
4.常用标签
autoescape:某块内容不需要自动转义。如果块内某些地方需要转义的话,可以调用filter
block:定义一个块,该块能够被继承他的子孙模板重写
comment:模板系统会忽略该标签内部的所有内容
cycle:在循环时轮流使用给定的字符串列表中的值
extends:表示本模板要对指定的父模板进行扩展
filter:将filter标签圈定的内容执行过滤器操作
ifchanged:检测本次循环的值和上一次循环的值一样不一样,只能用在循环里面
include:将另外一个模板文件中的内容添加到该文件中。注意区别extend是继承。
now:时间
spaceless:删除包围内容中的所有tab或者回车字符
with:当一个变量的访问消耗很大的模板解析时,可以用另外一个变量替换它,这种替换只有在with内部有效
三、csrf_token
这个标签用于跨站请求伪造保护。在页面的form表单里面写上{% csrf_token %}
四、过滤器:通过过滤器可以改变变量的显示方式,过滤器的形式是:{{ variable | filter }},管道符号'|'代表使用过滤器。
例如(表示当value为空或None时就会显示nothing):{{value | default:"nothing"}}
常用内建过滤器
add:value值增加xxx
addslashes:在value中引号(单引号和双引号)前增加反斜线
capfirst:value的第一个字符转化成大写形式
cut:移出value中包含xxx的字符串
date:将日期格式数据按照给定的格式输出
default:如果value的意义是False,那么输出使用缺省值
default_if_none:如果value是None,那么输出将使用缺省值
dictsort:如果value的值是一个字典,那么返回值是按照关键字排序的结果
dictsortreversed:如果value的值是一个字典,那么返回值是按照关键字排序的结果的反序
divisibleby:如果value能够被xxx整除,那么返回值将是True
escape:替换value中的某些字符,以适应HTML格式
escapejs:替换value中的某些字符,以适应JavaScript和Json格式
filesizeformat:格式化value,使其成为易读的文件大小
first:返回列表中的第一个Item
floatformat:返回四舍五入后的小数
get_digit:根据角标,返回请求的数字
iriencode:如果value中有非ASCII字符,那么将其进行转化成URL中适合的编码,如果value已经进行过URLENCODE,该操作就不会再起作用
join:使用指定的字符串连接一个list,作用如同python的str.join(list)
last:返回列表中的最后一个Item
length:返回value的长度
length_is:返回True,如果value的长度等于xxx的时候
linebreaks:value中的"\n"将被替代
linebreaksbr:value中的"\n"将被<br/>替代
linenumbers:显示的文本,带有行数
ljust:在一个给定宽度的字段中,左对齐显示value
center:在一个给定宽度的字段中,中心对齐显示value
rjust:在一个给定宽度的字段中,右对齐显示value
lower:将一个字符串转换成小写形式
make_list:将value转换成一个list,对于字符串,转换成字符list;对于整数,转换成整数list
pluralize:如果value不是1,则返回一个复数后缀,缺省的后缀是's'
random:从给定的list中返回一个任意的Item
removetags:删除value中xxx,xxx....的标签
safe:当系统设置autoescaping打开的时候,该过滤器使得输出不进行escape转换
safeseq :与上述safe基本相同,但有一点不同的就是:safe是针对字符串,而safeseq是针对多个字符串组成的sequence
slice:与python语法中的slice相同,:2表示第一的第二个元素
slugify:将value转换成小写形式,同事删除所有分单词字符,并将空格变成横线
striptags:删除value中的所有HTML标签
time:格式化时间输出,如果time后面没有格式化参数,那么输出按照TIME_FORMAT中设置的进行
title:转换一个字符串成为title格式(单词首字母大写)
truncatewords:将value切成truncatewords指定的单词数目
truncatewords_html:truncation点之前如果某个标签打开了,但是没有关闭,那么在truncation点会立即关闭。 因为这个操作的效率比truncatewords低,所有只有在value是html格式时,才考虑使用
upper:转换一个字符串为大写形式
urlencode:将一个字符串中的URL转化成可点击的形式
urlizetrunc:与upper相同,但是有一点不同就是现实的链接字符会被truncate成特定的长度,后面以...现实
wordcount:按照指定的长度包装字符串
timesince:返回参数xxx到value的天数和小时数
timeuntil:与wordcount基本相同,一个不同点就是,返回的是value距离当前日期的天数和小时数