Эффективный способ добавления атрибутов в HTML с использованием Flask с меньшим количеством строк кода для выбора элемента? - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть элемент 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).Есть ли способ сделать его более кратким, вместо того, чтобы писать 30 строк кода, как это с помощью оператора if для каждого?

1 Ответ

1 голос
/ 23 апреля 2019

Да, в шаблоне jinja2 есть цикл for.

Если у вас есть, например, список питонов, который содержит все опции выбора:

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...