Django Template 内置模板标签和过滤器
内置标签参考指南
注释
要注释模版中一行的部分内容,使用注释语法 {# #}.
{# {% if foo %}bar{% else %} #}
comment(注释)
在 {% comment %} 和 {% endcomment %},之间的内容会被忽略,作为注释。在第一个标签可以插入一个可选的记录。 比如,当要注释掉一些代码时,可以用此来记录代码被注释掉的原因。
autoescape 自动转义
默认情况下,Django 中的每个模板会自动转义每个变量的输出。明确地说,下面五个字符被转义:
- < 会转换为<
- > 会转换为>
- '(单引号) 会转换为'
- " (双引号)会转换为 "
- & 会转换为 &
我们要再次强调这个行为是默认打开的。如果你使用Django的模板系统,会处于保护之下。
关闭自动转义:
方法1:
This will not be escaped: {{ data|safe }}
方法2:
{% autoescape off %}
Hello {{ name }}
{% endautoescape %}
cycle(值循环)
每当这个标签被访问,则传出一个它的可迭代参数的元素。第一次访问返回第一个元素,第二次访问返回第二个参数,以此类推.一旦所有的变量都被访问过了,就会回到最开始的地方,重复下去这个标签在循环中特别有用。
示例:给表格单行循环样式
{% for o in some_list %} <tr class="{% cycle 'row1' 'row2' %}"> ... </tr> {% endfor %}
firstof
输出第一个不为False参数。如果传入的所有变量都为False,就什么也不输出。
简单用例:{% firstof var1 var2 var3 %}
它等价于:
{% if var1 %} {{ var1 }} {% elif var2 %} {{ var2 }} {% elif var3 %} {{ var3 }} {% endif %}
当然你也可以用一个默认字符串作为输出以防传入的所有变量都是False:{% firstof var1 var2 var3 "fallback value" %}
for
循环组中的每一个项目,并让这些项目在上下文可用。
可以利用{% for obj in list reversed %}反向完成循环。
如果你想访问一个字典中的项目,这个方法同样有用。举个例子:如果你的内容包含一个叫做data的字典,下面的方式可以输出这个字典的键和值:
{% for key, value in data.items %} {{ key }}: {{ value }} {% endfor %}
for循环设置了一系列在循环中可用的变量:
Variable
Description | |
---|---|
forloop.counter | The current iteration of the loop (1-indexed) |
forloop.counter0 | The current iteration of the loop (0-indexed) |
forloop.revcounter | The number of iterations from the end of the loop (1-indexed) |
forloop.revcounter0 | The number of iterations from the end of the loop (0-indexed) |
forloop.first | True if this is the first time through the loop |
forloop.last | True if this is the last time through the loop |
forloop.parentloop | For nested loops, this is the loop surrounding the current one |
for ... empty
for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% empty %} <li>Sorry, no athletes in this list.</li> {% endfor %}
spaceless
删除HTML标签之间的空白格.包括制表符和换行.(仅删除 tags 之间的空格 – 而不是标签和文本之间的。)
用法示例:
{% spaceless %} <p> <a href="foo/">Foo</a> </p> {% endspaceless %}
这个示例将返回下面的HTML:
<p><a href="foo/">Foo</a></p>
内置过滤器参考
add
把add后的参数加给value: {{ value|add:"2" }}
addslashes
在引号前面加上斜杆。例如,用于在CSV中转义字符串。
示例:{{ value|addslashes }} 如果value 是 "I'm using Django", 输出将变成 "I\'m using Django".
capfirst
大写变量的第一个字母。如果第一个字符不是字母,该过滤器将不会生效。
示例:{{ value|capfirst }} 如果 value 是 "django", 输出将变成 "Django".
cut
移除value中所有的与给出的变量相同的字符串
例如: {{ value|cut:" " }}
date
根据给定格式对一个date变量格式化
示例:{{ value|date:"D d M Y" }}
default
如果value的计算结果为False,则使用给定的默认值。否则,使用该value。
示例:{{ value|default:"nothing" }}
dictsort
接受一个字典列表,并返回按参数中给出的键排序后的列表。
示例:{{ value|dictsort:"name" }}
如果value为:
[ {'name': 'zed', 'age': 19}, {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, ]
那么输出将是:
[ {'name': 'amy', 'age': 22}, {'name': 'joe', 'age': 31}, {'name': 'zed', 'age': 19}, ]
dictsortreversed
获取字典列表,并返回按照参数中给出的键按相反顺序排序的列表。这与上面的过滤器完全相同,但返回的值将是相反的顺序。
divisibleby
如果value可以被给出的参数整除,则返回 True。
例如:{{ value|divisibleby:"3" }},如果value是21,则输出将为True。
filesizeformat
格式化数值为“人类可读”的文件大小(例如'13 KB', '4.1 MB', '102 bytes'等)。
first
返回列表中的第一项。
例如:{{ value|first }}
floatformat
当不使用参数时,将浮点数舍入到小数点后一位,但前提是要显示小数部分。例如:
value|floatformat
value|floatformat:3
value|floatformat:"0"
get_digit
给定一个整数,返回所请求的数字,其中1是最右边的数字,2是第二个最右边的数字等。返回无效输入的原始值(如果输入或参数不是整数,或参数小于1)。否则,输出总是一个整数。
join
使用字符串连接列表,例如Python的str.join(list)
例如:{{ value|join:" - " }}
last
返回列表中的最后一个项目。
例如:{{ value|last }}
length
返回值的长度。这适用于字符串和列表。
length_is
如果值的长度是参数,则返回True,否则返回False。
例如:{{ value|length_is:"4" }}
make_list
返回转换为列表的值。对于字符串,它是一个字符列表。对于整数,在创建列表之前将参数强制转换为unicode字符串。
random
返回给定列表中的随机项。
例如:{{ value|random }}
slice
返回列表的一部分。
使用与Python的列表切片相同的语法
示例:{{ some_list|slice:":2" }}
stringformat
根据参数格式化变量,一个字符串格式化说明符。
示例:{{ value|stringformat:"E" }} 更多参数:https://docs.python.org/3/library/stdtypes.html#string-formatting-operations
title
使字符以大写字符开头,其余字符小写,将字符串转换为titlecase。此标记不会努力保持“小写字”小写。
例如:{{ value|title }} 如果value为“my FIRST post”,输出将为“My First Post”。
truncatechars
如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“...”)结尾。
参数:要截断的字符数
例如:{{ value|truncatechars:9 }}
truncatewords
在一定数量的字后截断字符串。
参数:要截断的字数
例如:{{ value|truncatewords:2 }}
wordcount
返回字数。
示例:{{ value|wordcount }}
wordwrap
以指定的行长度换行单词。
参数:用于换行文本的字符数
例如:{{ value|wordwrap:5 }}
timesince
将日期格式设为自该日期起的时间(例如,“4天,6小时”)。
采用一个可选参数,它是一个包含用作比较点的日期的变量(不带参数,比较点为现在)。例如,如果blog_date是表示2006年6月1日午夜的日期实例,并且comment_date是2006年6月1日08:00的日期实例,则以下将返回“8小时”:
示例:{{ blog_date|timesince:comment_date }}
timeuntil
类似于timesince,除了它测量从现在开始直到给定日期或日期时间的时间。例如,如果今天是2006年6月1日,而conference_date是保留2006年6月29日的日期实例,则{{ conference_date | timeuntil }}将返回“4周”。