这是一个非常简单的问题,但我似乎无法找到一个好的答案。
我存储了有关用户选择的现有数据,并希望在下拉列表中选择所选内容。
{% 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手动添加类之外我无法想到一种方法,但这将是一种痛苦。
非常感谢你的帮助!
编辑:忘了包含我的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)
发现问题!
如果您遇到同样的问题---请检查您的编码!我的unicode正在抛出正常的绳子。
答案 0 :(得分:4)
这不是在模板中完成的,您必须在调用Form
之前在render_template()
对象上执行此操作。
例如:
form.gender.data = 'male'
答案 1 :(得分:4)
Miguel是对的 - 这是一个完整的工作示例:
#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>