假设我有以下列表,我通过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>
答案 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>