使用Jinja2和Flask(对于python3.7),我想创建带有for循环或带有__init__
方法的块。可能吗?
。
使用Jinja2 / Flask重复代码块的方法可能是:
<!-- here is my block -->
{% block myBlock %}
<div class="myClass" >
<p>{{ myText }}</p>
</div>
{% endblock myBlock %}
<!-- let's repeat ! -->
{% for i in range(10) %}
{{self.myBlock()}}
{% endfor %}
好的,但是如果我要3个块,3个类和3个文本,则需要编写如下内容:
{% block myBlock1 %}
<div class="myClass1" >
<p>{{ myText1 }}</p>
</div>
{% endblock myBlock1 %}
{% block myBlock2 %}
<div class="myClass2" >
<p>{{ myText2 }}</p>
</div>
{% endblock myBlock2 %}
{% block myBlock3 %}
<div class="myClass3" >
<p>{{ myText3 }}</p>
</div>
{% endblock myBlock3 %}
显然这不是一个好方法,所以我的问题是:如何分解此代码?
。
是否可以这样写:
{% set my_list = [("myClass1", "myBlock1", "myText1"),
("myClass2", "myBlock2", "myText2"),
("myClass3", "myBlock3", "myText3")] %}
{% for _class, _block, feature in my_list %}
{% block _block %}
<div class="{{ _class }}" >
<p>{{ feature }}</p>
</div>
{% endblock _block %}
{% endfor %}
当然不会起作用:_class
和feature
将被视为变量,而不是_block
。
有什么可能的吗?
关于我们的第一个示例,是否有一种方法可以在我们的{{ self.myBblock() }}
处传递变量以获取{{ self.myBlock(_class="MyClass", _name="MyBlockName", text="Mytext") }}
?
因为如果可能的话,我们可以定义一个“块通用结构”,并且可以很容易地做到:
{% set my_list = [("myClass1", "myBlock1", "myText1"),
("myClass2", "myBlock2", "myText2"),
("myClass3", "myBlock3", "myText3")] %}
{% for _class, _block, feature in my_list %}
{{ self.myBlock(_class="_class", _name=_block, text=feature) }}
{% endfor %}
。
感谢您的帮助!