2017-06-22 148 views
0

我有以下模板“base.html文件”在Jinja2中使用变量名称作为块名称?

{% 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 %} 
+0

你能不能给一个理由,你为什么会想这个? –

+0

我不认为没有理由这样做。 –

+0

我们有一个框架应用程序,允许人们通过在安装文件中传递其选项卡列表来动态生成导航栏和选项卡。如果不可能,我们可以为每个选项卡编写更多相同的模板代码 - 我只是希望尽量减少重复设置。 –

回答

0

这是不可能的。块名称已经是名称,您不能从变量中指定它们的名称。

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

base.html

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

id1.html

<p>id1 content</p>