Колба WTForm рендер выбран с Bootstrap
Это действительно простой вопрос, но я не могу найти хороший ответ.
У меня есть существующие данные, хранящиеся о выборе пользователя, и я хочу отобразить этот выбор, как выбранный в раскрывающемся списке.
{% macro render_bootstrap_field(field) %}
<div class="form-group {% if field.errors %} error {% endif %}">
<label class="col-lg-2 control-label">{{ field.label }}</label>
<div class="col-lg-8">
{{ field(class='form-control')|safe }}
{% if field.errors %}
{% for error in field.errors %}
<span class="help-inline">[{{ error }}]</span><br>
{% endfor %}
{% endif %}
</div>
</div>
{% endmacro %}}
И вот как это делается:
{{ render_bootstrap_field(form.gender) }}
Он не показывает, что выбрано, и я не могу придумать способ, кроме использования jquery, чтобы добавить класс вручную, но это было бы больно.
Большое Спасибо за помощь!
Edit: забыл включить мой view.py функция! Поэтому я установил его
@app.route('/edit_user', methods=['GET', 'POST'])
@login_required
def edit_user():
form = UserInfoForm(g.user.nickname)
form.gender.choices = app.config['GENDER']
form.year.choices = app.config['BIRTH_YEAR']
form.education.choices = app.config['EDUCATION']
if request.method == 'POST' and form.validate_on_submit():
flash("submitting")
g.user.nickname = form.nickname.data
g.user.gender = form.gender.data
g.user.education = form.education.data
g.user.year = form.year.data
g.user.info_complete = True
db.session.add(g.user)
db.session.commit()
return redirect(url_for('edit_user'))
elif request.method != "POST":
form.nickname.data = g.user.nickname
form.gender.data = g.user.gender
form.education.data = g.user.education
form.year.data = g.user.year
return render_template('edit_user.html',
form=form,
user=g.user)
Проблема найдена!
Если вы столкнулись с той же проблемой-проверьте кодировку! Мой Юникод выбрасывал нормальную строку.
2 ответа:
Это не делается в шаблоне, вы должны сделать это на объекте
Form
перед вызовомrender_template()
.Например:
form.gender.data = 'male'
Мигель прав - вот полный рабочий пример:
#app.py from flask import Flask, render_template from flask_wtf import Form from wtforms import SelectField app = Flask(__name__) app.secret_key = 'Testing BS' choices = [ ('1', 'Alice'), ('2', 'Bob'), ('3', 'Carol'), ] class MyForm(Form): name = SelectField('Pick Name', choices=choices) @app.route('/', methods=['post','get']) def hello_world(): form = MyForm() form.name.data = '2' # lets set Bob to be active. return render_template('example.html', form=form) if __name__ == '__main__': app.run(debug=True)
И шаблон:
#example.html {% macro render_bootstrap_field(field) %} <div class="form-group {% if field.errors %} error {% endif %}"> <label class="col-lg-2 control-label">{{ field.label }}</label> <div class="col-lg-8"> {{ field(class='form-control')|safe }} {% if field.errors %} {% for error in field.errors %} <span class="help-inline">[{{ error }}]</span><br> {% endfor %} {% endif %} </div> </div> {% endmacro %} <form method="POST" action="#"> {{ render_bootstrap_field(form.name) }} <input type="submit" value="Go"> </form>