首页 > 解决方案 > 使用 Flask 向 HTML 添加属性的有效方法,使用更少的代码行来选择元素?

问题描述

我有一个select元素,如果该信息已经存在,我想从数据库中填充该元素。例如,这是我为性别所做的:

<select class="form-control" id="gender">
    <option value="-5">Not Selected</option>
    {% if current_user.gender == 0 %}
      <option value="0" selected>Male</option>
    {% else %}
      <option value="0">Male</option>
    {% endif %}

    {% if current_user.gender == 1 %}
        <option value="1" selected>Female</option>
    {% else %}
        <option value="1">Female</option>
    {% endif %}
</select>

现在我有另一个select元素,它有 6 个不同的选项(所有选项都具有整数值 0、1、2 ... 5)。有没有办法让它更简洁,而不是像这样用 if 语句编写 30 行代码?

标签: htmlflaskattributesjinja2

解决方案


是的,jinja2 模板中有 for 循环。

例如,如果您有一个包含所有选择选项的 python 列表:

options = ['option1', 'option2', 'option3', ...]

<select class="form-control" id="gender">

{% for option in options %}
<option value="{{ loop.index }}" 
{% if current_user.gender == loop.index %}
selected
{% endif %}
>{{ option }}</option>
{% endfor %}
<option value="-5">Not Selected</option>

</select>

loop.index 表示循环的当前迭代。(1 个索引)

这是一个示例,但是当您遍历从数据库中获取的对象时还有其他示例:

objects = [object1, object2, object3, ...]

<select class="form-control" id="gender">

{% for object in objects %}
<option value="{{ object.value }}" 
{% if object.value == current_user.gender %}
selected
{% endif %}
>{{ object.name }}</option>
{% endfor %}
<option value="-5">Not Selected</option>

</select>

推荐阅读