Django模板标签
Django Web框架提供了几十个标签,用于在模板中实现任意的逻辑。标签看起来像这样。{%标签%}.标签比变量更复杂。一些标签在输出中创建文本,一些标签通过执行循环或逻辑来控制流程,还有一些标签将外部信息加载到模板中,供后来的变量使用。标签在渲染过程中提供任意的逻辑。例如,一个标签可以输出内容,作为一个控制结构,例如一个 “if “语句或 “for “循环,从数据库中抓取内容,甚至可以访问其他模板标签。
语法
{% tag_name %}
示例
标签被{%和%}所包围,像这样。
{% csrf_token %}
大多数标签都接受参数,例如::
{% cycle 'odd' 'even' %}
Django模板中常用的标签
1. comment
模板忽略了{% comment %}和{% endcomment %}之间的所有内容。在第一个标签中可以插入一个可选的注释。例如,这在注释代码时很有用,可以记录代码被禁用的原因。
示例
{% comment "Optional note" %}
Commented out text with {{ create_date|date:"c" }}
{% endcomment %}
要查看更多关于评论标签的信息,请访问 – 评论 – Django模板标签
- 循环
每次遇到这个标签时,它都会产生一个参数。第一次遇到时产生第一个参数,第二次遇到时产生第二个参数,以此类推。一旦所有参数用完,标签会循环到第一个参数并再次产生。
示例
这个标签在循环中特别有用。
{% for o in some_list %}
<tr class="{% cycle 'row1' 'row2' %}">
...
</tr>
{% endfor %}
第一次迭代产生的HTML指向类row1,第二次指向row2,第三次再次指向row1,以此类推,循环的每一次迭代都是如此。
要查看更多关于循环标签的信息,请访问 – 循环 – Django模板标签
- extends
extends标签是用来继承django中的模板的。一个人需要不断地重复相同的代码。使用extends,我们可以继承模板,也可以继承变量。
示例
假设目录结构如下。
dir1/
template.html
base2.html
my/
base3.html
base1.html
在template.html中,以下路径是有效的。
{% extends "./base2.html" %}
{% extends "../base1.html" %}
{% extends "./my/base3.html" %}
要查看更多关于extends标签的信息,请访问 – extends – Django模板标签
4.if
{% if %}标签评估一个变量,如果该变量为 “真”(即存在,不是空的,也不是一个错误的布尔值),则输出该块的内容。例子
{% if athlete_list %}
Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
Athletes should be out of the locker room soon!
{% else %}
No athletes.
{% endif %}
在上面,如果athlete_list不是空的,运动员的数量将由{{ athlete_list|length }}变量显示。
正如人们所看到的,if标签可以接受一个或几个{% elif %}子句,以及一个{% else %}子句,如果前面所有的条件都失败,就会显示出来。这些子句是可选的。
要查看更多关于if标签的信息,请访问 – if – Django模板标签
5.for loop
for标签在一个数组中的每个项目上循环,使该项目在一个上下文变量中可用。
示例
例如,要显示 athlete_list 中提供的运动员名单。
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
想了解更多关于for loop标签的信息,请访问 – for loop – Django模板标签
6.for … 空循环
for标签在一个数组中的每个项目上循环,使该项目在一个上下文变量中可用。for标签可以接受一个可选的{% empty %}子句,如果给定的数组是空的或者找不到,则显示其文本。这基本上被用作检查查询集是否为空的条件,以及在相同情况下要执行的操作。
示例
<ul>
{% if athlete_list %}
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
{% else %}
<li>Sorry, no athletes in this list.</li>
{% endif %}
</ul>
查看更多关于for … empty loop标签,请访问 – for … empty loop – Django模板标签
7.布尔运算符
{% if %}标签会评估一个变量,如果该变量为 “真”(即存在,不为空,也不是一个错误的布尔值),则会输出该块的内容。人们可以用Django If Template标签使用各种布尔运算符。
示例
<ul>
{% if variable boolean_operator value %}
// statements
{% endif %}
</ul>
想了解更多关于布尔运算符的信息,请访问 – 布尔运算符 – Django模板标签
8.firstof
firstof tag 输出第一个非 “false “的参数变量(即存在、非空、非假布尔值、非零数字值)。如果所有传递的变量都是 “false”,则不输出任何结果。
示例
{% firstof var1 var2 var3 %}
这相当于。
{% if var1 %}
{{ var1 }}
{% elif var2 %}
{{ var2 }}
{% elif var3 %}
{{ var3 }}
{% endif %}
我们也可以使用一个字面字符串作为后备值,以防所有传递的变量都是False。
{% firstof var1 var2 var3 "fallback value" %}
要查看更多关于firstof标签的信息,请访问 – firstof – Django模板标签
9.include
include标签加载一个模板并以当前的上下文渲染它。这是一种在模板中 “包括 “其他模板的方式。模板名称可以是一个变量,也可以是一个硬编码(带引号)的字符串,用单引号或双引号。
示例
{% include "foo/bar.html" %}
通常,模板名称是相对于模板加载器的根目录而言的。字符串参数也可以是以./或./开头的相对路径,如extends标签中所述。
要查看更多关于include标签的信息,请访问 – include – Django模板标签
10.lorem
lorem标签显示随机的 “lorem ipsum “拉丁文本。这对于在模板中提供样本数据很有用。
示例
- {% lorem %}将输出常见的 “lorem ipsum “段落。
- {% lorem 3 p %}将输出常见的 “lorem ipsum “段落和两个随机段落,每个段落都用HTML标签包装。
- {% lorem 2 w random %}将输出两个随机的拉丁语单词。
要查看更多关于lorem标签的信息,请访问 – lorem – Django模板标签
11.now
现在标签显示当前日期和/或时间,使用符合给定字符串的格式。这种字符串可以包含日期过滤器部分所述的格式指定符。
示例
It is {% now "D d M Y" %}
以上标签将显示, Tue 04 Feb 2020
要查看更多关于now标签的信息,请访问 – now – Django模板标签
12.url
url标签 返回一个与给定视图和可选参数相匹配的绝对路径参考(没有域名的URL)。这是在不违反DRY原则的情况下,在模板中硬编码URL的一种输出链接的方式。
示例
{% url 'some-url-name' v1 v2 %}
第一个参数是一个URL模式名称。它可以是一个带引号的字面意思或任何其他的上下文变量。其他参数是可选的,应该是空格分隔的值,将作为URL中的参数使用。