提示和技巧¶
这部分文档展示了一些 Jinja2 模板的提示和技巧。
空主失败¶
Jinja2 支持动态继承并且只要没有 extends 标签被访问过,就不分辨父模板和子模 板。 而这会导致令人惊讶的行为:首个 extends 标签前的包括空白字符的所有东西 会被打印出来而不是被忽略,这也可以用作一个巧妙的方法。
通常,继承一个模板的子模板来添加基本的 HTML 骨架。 但是,如果独立变量评估为false,则可以将extends t>标记放入if标记中,如果没有定义,默认情况下。 此外,一个非常基本的骨架会被添加到文件,这样如果确实带 置为 True 的 standalone 渲染,一个非常基本的 HTML 骨架会被添加:
{% if not standalone %}{% extends 'master.html' %}{% endif -%}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">
{% block body %}
<p>This is the page body.</p>
{% endblock %}
交替行¶
如果你想要对一个表格或列表中的每行使用不同的样式,可以使用 loop 对象的 cycle 方法:
<ul>
{% for row in rows %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}
</ul>
cycle 可接受无限数目的字符串。 每次遭遇这个标签,列表中的下一项 就会被渲染。
访问父级循环¶
特殊的 loop 变量总是指向最里层的循环。 如果想要访问外层的循环,可以给它 设置别名:
<table>
{% for row in table %}
<tr>
{% set rowloop = loop %}
{% for cell in row %}
<td id="cell-{{ rowloop.index }}-{{ loop.index }}">{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>