jinja2:在select标签内分组数据

时间:2017-02-03 19:47:45

标签: python flask jinja2

假设我有以下列表,我通过Flask传递给jinja2模板:

names = ['Joe', 'Lilly', 'Damion', 'Stephanie', 'Justin']

我正在遍历此列表并将数据分组到optgroups标记内的不同select

的Jinja2:

<label for="names">Names:</label>
<select id="names">
  {% for n in names %}
    {% if n == 'Joe' or n == 'Damion' or n == 'Justin' %}
      <optgroup label='Males'>
        <option value='{{ n }}'>{{ n }}</option>
      </optgroup>
    {% endif %}
    {% if n == 'Lilly' or n == 'Stephanie' %}
      <optgroup label='Females'>
        <option value='{{ n }}'>{{ n }}</option>
      </optgroup>
    {% endif %}
  {% endfor %}
</select>

但是,这会为下拉列表中的每个名称创建一个新标签。我想对名称进行分组,并在下拉列表中仅打印一个标签。我怎么能这样做?

编辑:我尝试过以下代码无效。

<select id="names">
  {% for n in names %}
    <optgroup label='Males'>
      {% if n == 'Joe' or n == 'Damion' or n == 'Justin' %}
        <option value='{{ n }}'>{{ n }}</option>
      {% endif %}
    </optgroup>
    <optgroup label='Females'>
      {% if n == 'Lilly' or n == 'Stephanie' %}
        <option value='{{ n }}'>{{ n }}</option>
      {% endif %}
    </optgroup>
  {% endfor %}
</select>

1 个答案:

答案 0 :(得分:2)

我同意评估这是一个糟糕的设计。但要解决您遇到的问题,必须在名称上循环两次:

<select id="names">
  <optgroup label='Males'>
    {% for n in names %}
      {% if n == 'Joe' or n == 'Damion' or n == 'Justin' %}
        <option value='{{ n }}'>{{ n }}</option>
      {% endif %}
    {% endfor %}
  </optgroup>
  <optgroup label='Females'>
    {% for n in names %}
      {% if n == 'Lilly' or n == 'Stephanie' %}
        <option value='{{ n }}'>{{ n }}</option>
      {% endif %}
    {% endfor %}
  </optgroup>
</select>