首页 > 代码库 > 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