Как повторить какой-то блок, используя переменную с jinja2 - PullRequest
0 голосов
/ 27 мая 2019

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 %}

.

спасибо за помощь !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...