Django-Jinja2模板

  1. 模板
    1. Jinja2模板的中文文档
    2. Jinja2模板的使用语法
      1. - 变量表示
      2. - for循环

模板

Jinja2模板的中文文档

http://docs.jinkan.org/docs/jinja2/

Jinja2模板的使用语法

- 变量表示

  • 应用把变量传递到模板,你可能在模板中弄混。变量上面也可以有你能访问的属性或元 素。变量看起来是什么,完全取决于应用提供了什么。
  • 你可以使用点( . )来访问变量的属性,作为替代,也可以使用所谓的“下标”语 法( [])。下面的几行效果是一样的:
1
2
{{ foo.bar }}             
{{ foo['bar'] }}
  • 知晓花括号 不是 变量的一部分,而是打印语句的一部分是重要的。如果你访问标签 里的不带括号的变量。
  • 如果变量或属性不存在,会返回一个未定义值。你可以对这类值做什么取决于应用的配 置,默认的行为是它如果被打印,其求值为一个空字符串,并且你可以迭代它,但其它 操作会失败。
1
2
3
4
5
6
7
8
9
10
11
12
实现
为方便起见,Jinja2 中 foo.bar 在 Python 层中做下面的事情:

- 检查 foo 上是否有一个名为 bar 的属性。
- 如果没有,检查 foo 中是否有一个 'bar' 项 。
- 如果没有,返回一个未定义对象。
foo['bar'] 的方式相反,只在顺序上有细小差异:

- 检查在 foo 中是否有一个 'bar' 项。
- 如果没有,检查 foo 上是否有一个名为 bar 的属性。
- 如果没有,返回一个未定义对象。
如果一个对象有同名的项和属性,这很重要。此外,有一个 attr() 过滤 器,它只查找属性。

- for循环

  • 遍历列表中的每一个选项。例如,要显示一个由 users` 变量提供的用户列表:
1
2
3
4
5
6
<h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username|e }}</li>
{% endfor %}
</ul>
  • 因为模板中的变量保留它们的对象属性,可以迭代像 dict 的容器:
1
2
3
4
5
6
<dl>
{% for key, value in my_dict.iteritems() %}
<dt>{{ key|e }}</dt>
<dd>{{ value|e }}</dd>
{% endfor %}
</dl>
  • 注意无论如何字典通常是无序的,所以你可能需要把它作为一个已排序的列表传入 到模板或使用 dictsort 过滤器。
  • 在一个 for 循环块中你可以访问这些特殊的变量:
变量 描述
loop.index 当循环迭代的次数(从1开始)
loop.index0 当循环迭代的次数(从0开始)
loop.revindex 到循环结束需要迭代的次数(从1开始)
loop.revindex0 到循环结束需要迭代的次数(从0开始)
loop.first 如果第一次迭代,为True
loop.lost 如果最后一次迭代,为True
loop.length 序列中的项目数
loop.cycle 在一串序列间期取值的辅助函数。见下面的解释
  • 在 for 循环中,可以使用特殊的 loop.cycle 辅助函数,伴随循环在一个字符串/变 量列表中周期取值:
1
2
3
{% for row in rows %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com
目录
主站