Установить значение по умолчанию для элемента select html в шаблоне Jinja?

Я использую flask / jinja, чтобы сделать простое веб-приложение. У меня есть таблица записей, которая берется из таблицы БД и вызывается веб-страницей, которая загружает список записей. В каждой строке есть раскрывающийся список (выполняется с помощью тега select HTML) в столбце.

Я понимаю, что приведенный ниже код не делает то, что должен, в настоящее время последний вариант (четвертый) автоматически выбирается из-за выбранного тега. Я оставил это, чтобы попытаться показать, что я пытаюсь. осуществлять.

В идеале я бы хотел, чтобы он проверял состояние текущей записи (rec.статус в коде ниже) и в зависимости от этого, выберите соответствующий пункт в выпадающем списке.

HTML-код:

     <tbody>
            {% for rec in records %}
        <tr>
          <td>{{ rec.task }}</td>
          <td>
            <select>
              <option value ="zero" selected={{rec.status==0}}>Zero</option>
              <option value ="first" selected={{rec.status==1}}>First</option>
              <option value ="second" selected={{rec.status==2}}>Second</option>
              <option value ="third" selected={{rec.status==3}}>Third</option>
            </select>
          </td>
          <td><a href={{ "/update_status/"~rec.id}}>Update</a></td>
      </tr>
      {% endfor %}
      </tbody>

спасибо!

2 ответов


ты на правильном пути - но в настоящее время, вы печатаете selected во всех параметрах в поле выбора. Вы можете попробовать что-то вроде этого, чтобы печатать только выбранные на правильной опции:

    <select>
      <option value="zero"{% if rec.status==0 %} selected="selected"{% endif %}>Zero</option>
      <option value="first"{% if rec.status==1 %} selected="selected"{% endif %}>First</option>
      <option value="second"{% if rec.status==2 %} selected="selected"{% endif %}>Second</option>
      <option value="third"{% if rec.status==3 %} selected="selected"{% endif %}>Third</option>
    </select>

для будущих гуглеры:

если вы используете WTForms и хотите установить выбор по умолчанию в Jinja, вам может присниться, что что-то вроде этого может работать:

{{ form.gender(class='form-control', value='male') }}

но это не так. Не default='male', ни selected='male' (по крайней мере, не для меня в Jinja 2.8 и WTForms 2.1).

если вы в отчаянии и не хотите, чтобы установить его в вашем forms.py и не возражаете получить немного hacky, вы можете сделать это:

{{ form.gender(class='form-control hacky', value=data['gender']) }}

<script>
    var els = document.getElementsByClassName("hacky");
    for (i = 0; i < els.length; i++) {
        els[i].value = els[i].getAttribute('value');
    }
</script>

это устанавливает его при загрузке страницы использование JavaScript и позволяет передавать выбор по умолчанию в поле выбора без необходимости возиться с вашим forms.py - ... Возможно, в Джиндже есть лучший способ сделать это, но я его еще не нашел.