提示和技巧¶
这部分文档展示了一些Jinja模板的技巧和技巧。
空-默认回退¶
Jinja支持动态继承,不区分父模板和子模板,只要 extends 已访问标记。虽然这导致了令人惊讶的行为 extends 包含空白的标签被打印出来,而不是被忽略,它可以用于一个整洁的技巧。
通常,子模板从一个添加基本HTML框架的模板扩展而来。但是可以把 extends 标签进入 if 标记仅从布局模板扩展,如果 standalone 变量的计算结果为false,如果未定义,则默认为false。另外,一个非常基本的骨架被添加到文件中,这样如果它确实是用 standalone 设置为 True 添加了一个非常基本的HTML框架:
{% if not standalone %}{% extends 'default.html' %}{% endif -%}
<!DOCTYPE html>
<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 %}
交替行¶
如果要对表或列表的每一行使用不同的样式,可以使用 cycle 方法在 loop 对象:
<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>