模板继承
模板继承可以达到模板复用的效果,当写一个模板的时候可以定义 "blocks",子模板可以覆盖他,同时支持多层继承。
如果有一个叫做 parent.html
的模板,如下所示:
{% block header %}
This is the default content
{% endblock %}
<section class="left">
{% block left %}{% endblock %}
</section>
<section class="right">
{% block right %}
This is more content
{% endblock %}
</section>
然后再写一个模板继承他
{% extends "parent.html" %}
{% block left %}
This is the left side!
{% endblock %}
{% block right %}
This is the right side!
{% endblock %}
以下为渲染结果
This is the default content
<section class="left">
This is the left side!
</section>
<section class="right">
This is the right side!
</section>
你可以将继承的模板设为一个变量,这样就可以动态指定继承的模板。这个变量既可以是个指向模板文件的字符串,也可以是个模板编译后所生成的对象(需要添加上下文环境)。因此你可以通过设置上下文变量,从而在渲染时动态地改变所要继承的模板。
{% extends parentTemplate %}
继承功能使用了 extends
和 block
标签,jinja2 文档中有更细节的描述。
super
你可以通过调用super
从而将父级区块中的内容渲染到子区块中。如果在前面的例子中你的子模板是这样的:
{% block right %}
{{ super() }}
Right side!
{% endblock %}
这个区块的渲染结果将是:
This is more content
Right side!