Выберите значение по умолчанию для массива колб в поле выбора в jinja для динамических данных - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь установить значение по умолчанию для поля выбора, которое динамически генерируется с помощью цикла for с использованием jinja на странице html, и я не могу найти решение для этого в документации.В основном мне нужен способ установить значение по умолчанию для поля выбора с помощью jinja, если это возможно.

Я не могу установить значение по умолчанию со стороны маршрутов или со стороны форм в Python, потому что поля создаются динамически и значения по умолчаниюдолжны быть разными в зависимости от выбора.Я могу установить значение по умолчанию, если я использую строковое поле, но не поле выбора.

Может кто-нибудь помочь мне найти решение этой проблемы?Могу ли я переключиться на другое поле формы, чтобы использовать его вместо поля выбора?

2-й вопрос: могу ли я создать и использовать поле HTML вручную, которое будет работать с другими полями wtform при отправке, если я установлю идентификатор иимя, чтобы быть, что было бы, когда HTML-страница генерируется?У меня мог бы быть способ решить мою проблему таким способом, если это возможно.

код для того, как это будет сделано со строковым полем, которое я хочу перевести в selectfield:

{% for d in data %}
{{ form.type.label(class="label") }}
{{ form.type(class="field", value=d.type) }}
{% endfor %}

Спасибо

Ответы [ 2 ]

0 голосов
/ 27 августа 2019

Что касается установки значения по умолчанию для SelectField с использованием WTForms и Jinja2 с динамическими данными, вы можете использовать следующий пример:

Во-первых, определите SelectField в своей форме.

class MyForm(FlaskForm):
    country_id = SelectField("Country", coerce=int) #[('1','USA'),..])

Затем запросите базу данных, чтобы создать список доступных значений.

@app.route("/...")
def country(): 
   form = MyForm()
   available_countries=db.session.query(Country).all()
   countries_list=[(i.id, i.name) for i in available_countries]
   form.country_id.choices = countries_list

Наконец, в html, используйте process_data, чтобы определить выбранное значение.Примечание: переменная z не используется.

{% set z = form.country_id.process_data(countryNameVariable) %}
{{ form.country_id(class="")}}
0 голосов
/ 22 февраля 2019

Это единственный способ сделать это

Вы можете сделать что-то подобное в вашем views.py

@app.route('/')
def index():
    data=[{'name':'red'}, {'name':'green'}, {'name':'blue'}]
    return render_template('index.html', data=data)

и в вашем html шаблоне

<select name="colour" class="select-field">
    {% set default_value = 'green' %}
    {% for d in data %}
    <option value="{{ d.name }}" {% if d.name == default_value %}selected="selected"{% endif %}>{{ d.name }}</option>
    {% endfor %}
</select>
...