首页 > 代码库 > Django模板系统(Template System)——之模板语言1
Django模板系统(Template System)——之模板语言1
本篇介绍几个通用标签:
1.if标签:{% if %}...{% endif %}
2.for标签:{% for %}...{% endfor %}
3.比较标签:{% ifequal/ifnotequal %}...{% endifequal/endifnotequal %}
4.注释标签:{% comment %}...{% endcomment %}
模板
是一个纯文本文件,或是一个用Django模板语言标记过的普通的Python字符串。 模板可以包含模板标签和变量。
模板标签 是在一个模板里面起标记的作用,也可称为——区块标签。是被{%和%}包围,形如:{% *** %}
变量 是一个在模板里用来输出值的标记。变量标签被 {{ 和 }} 包围,形如:{{ varname }}
模板语言中的通用标签和过滤器
if 、else 标签:{% if *** %} ... {% else %} ... {% endif %}
if 可接受 and , or 或者 not 关键字来对多个变量做判断;多次使用同一个逻辑操作符是没有问题的,如:{% if * or * or * %} 是合法的 ;但是我们不能把不同的操作符组合起来,如:{% if * or * and * %} 是非法的;
{% else %} 是可选标签;
没有 {% elif %} 标签, 可使用嵌套的 {% if %} 标签来达到同样的效果;
系统不支持用圆括号来组合比较操作。 如需要用到圆括号来组合表达你的逻辑式,考虑将它移到模板之外处理,然后以模板变量的形式传入结果,或者用嵌套的{% if %}标签替换;
{% if *** %}
...
{% else %}
...
{% endif %}
for 标签:{% for x in y %} ... {% empty %} ... {% endfor %}
{% for %}允许在一个序列上迭代,与Python的 for 语句的情形类似。给标签增加一个 reversed 使得该列表被反向迭代{% for x in y reversed %};
{% empty %}是可选标签,通过它可以定义当列表为空时的输出内容。亦可在循环之前用 if 标签检测序列是否为空,可达到同样的效果;
此循环不支持退出break,也不支持continue;
{% for %}循环里有一个称为 forloop 的模板变量,这个变量有一些提示循环进度信息的属。forloop 变量仅仅能够在循环中使用,在模板解析器碰到{% endfor %}标签后,forloop就不可访问了。
forloop.counter 是一个表示当前循环的执行次数的整数计数器,这个计数器是从1开始的,所以在第一次循环时 forloop.counter 将会被设置为1
forloop.counter0 类似于 forloop.counter ,但是它是从0计数的, 第一次执行循环时这个变量会被设置为0
forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数,最后一次循环执行中,这个变量将被置1
forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引。 在第一次执行循环时,该变量会被置为序列的项的个数减1
forloop.first 是一个布尔值,如果该迭代是第一次执行,那么它被置为True
forloop.last 是一个布尔值,在最后一次执行循环时被置为True
forloop.parentloop 是一个指向当前循环的上一级循环的 forloop 对象的引用(在嵌套循环的情况下)
ifequal、ifnotequal 标签:{% ifequal var1 var2 %}...{% else %}...{% endifequal %} 、 {% ifnotequal var1 var2 %}...{% else %}...{% ifnotequal %}
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值;
{% ifnotequal %} 标签比较两个值,当他们不相等时,显示在 {% ifnotequal %} 和 {% endifnotequal %} 之中所有的值;
支持可选的 {% else %} 标签;
{% ifequal/ifontequal %} 标签的参数标签的参数只有模板变量、字符串、整数和小数,其他任何类型,例如Python的字典类型、列表类型、布尔类型,不能用在 {% ifequal/ifnotequal %} 中。
注释 标签:{# ... #} {% comment %}...{% endcomment %}
注释的内容不会在模板渲染时输出。
{# ... #}用这种语法的注释不能跨越多行, 这个限制是为了提高模板解析的性能;
{% comment %}模板标签实现多行注释;
Django模板系统(Template System)——之模板语言1