在Jinja2中为块的名称使用变量名?

时间:2017-06-22 15:36:34

标签: python flask jinja2

我有以下模板“base.html”

{% set list_of_ids = ['id1', 'id2', 'id3'] %}
{% for id in list_of_ids %}
  <div class="content">
    {% block id %}
    {% endblock %}
  </div>
{% endfor %}

是否可以在另一个模板“id1.html”中执行此操作

{% extends "base.html" %}

{% block id1 %}
   <p>This is my content for id1 block! Different from id2 and id3 blocks</p>
{% endblock %}

2 个答案:

答案 0 :(得分:1)

这是不可能的。块名称已经是名称,您无法从变量中为它们分配名称。

include可以接受变量。解决方案是包含不同的模板名称并定义模板本身,而不是模板中的块。

base.html

{% for id in ids %}
    {% include 'id' ~ id ~ '.html' %}
{% endfor %}

id1.html

<p>id1 content</p>

答案 1 :(得分:0)

它一文不值,但您可以在“树枝”(Jinja2引擎的PHP版本)中完成。

{% for block_name in blocks %}
  {{ block(block_name) }}
{%endfor %}