模板继承

模板继承可以达到模板复用的效果,当写一个模板的时候可以定义 "blocks",子模板可以覆盖他,同时支持多层继承。

如果有一个叫做 parent.html 的模板,如下所示:

  1. {% block header %}
  2. This is the default content
  3. {% endblock %}
  4. <section class="left">
  5. {% block left %}{% endblock %}
  6. </section>
  7. <section class="right">
  8. {% block right %}
  9. This is more content
  10. {% endblock %}
  11. </section>

然后再写一个模板继承他

  1. {% extends "parent.html" %}
  2. {% block left %}
  3. This is the left side!
  4. {% endblock %}
  5. {% block right %}
  6. This is the right side!
  7. {% endblock %}

以下为渲染结果

  1. This is the default content
  2. <section class="left">
  3. This is the left side!
  4. </section>
  5. <section class="right">
  6. This is the right side!
  7. </section>

你可以将继承的模板设为一个变量,这样就可以动态指定继承的模板。这个变量既可以是个指向模板文件的字符串,也可以是个模板编译后所生成的对象(需要添加上下文环境)。因此你可以通过设置上下文变量,从而在渲染时动态地改变所要继承的模板。

  1. {% extends parentTemplate %}

继承功能使用了 extendsblock 标签,jinja2 文档中有更细节的描述。

super

你可以通过调用super从而将父级区块中的内容渲染到子区块中。如果在前面的例子中你的子模板是这样的:

  1. {% block right %}
  2. {{ super() }}
  3. Right side!
  4. {% endblock %}

这个区块的渲染结果将是:

  1. This is more content
  2. Right side!