0 / Мой вопрос
Используя Jinja2 и Flask (для python3.7), я хочу создать блоки с циклом for или с чем-то вроде __init__
метода. Является ли это возможным?
.
1 / Background
Способ повторить блок кода с 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 %}
Это, очевидно, не очень хороший способ для этого, поэтому мой вопрос: как разложить этот код?
.
2 / Ожидаемый результат / решение
первый
Можно ли написать что-то вроде этого:
{% 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 %}
.
спасибо за помощь !!!