Установить значение по умолчанию для выбора элемента 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>