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

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

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

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

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>

Спасибо!

Ответ 1

Вы на правильном пути, но в настоящее время вы печатаете 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>

Ответ 2

В будущем Googlers:

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

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

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

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

{{ 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 и позволяет передать выбранный по умолчанию выбор в SelectField без необходимости связываться с вашими формами .py. Вероятно, лучший способ сделать это в Jinja, но я еще не нашел его.

Ответ 3

FYI- для HTML 5, selected = "selected" становится просто выделенным вот так:

<option value="zero"{% if rec.status==0 %} selected{% endif %}>Zero</option>