Установить значение по умолчанию для элемента 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 - ... Возможно, в Джиндже есть лучший способ сделать это, но я его еще не нашел.