我需要使用jinja模板添加默认选项值以选择字段。
form.py
class TeamForm(Form):
user = SelectField(u'Team Member')
views.py
class myview(request,id):
form = TeamForm(request.form)
members =db.session.query(teams).filter_by(t_id = id).all()
return render_template("members.html",form=form,members=members)
member.html
<table>
{% for member in members%}
<tr>
<td>{{ form.user(class_="form-control",value=user.id) }}</td>
</tr>
{% endfor %}
</table>
分配的选项值未显示在输出中。
在这里,我必须根据团队中的成员循环选择字段。 例如,如果团队有3个成员,我将显示这三个成员自动选择的三个选择字段。
任何人都可以帮助我吗?提前谢谢。
答案 0 :(得分:0)
你有两个问题在这里:
(1)要在表单中实现默认值,只需在form.py中使用SelectField类的default=(value, label)
选项。
假设您希望默认为Johnny作为您的团队成员,并且该选项的数值为0.然后您可以使用default=(value, label)
执行类似的操作:
class TeamForm(Form):
user = SelectField(u'Team Member', default=(0, "Johnny"))
只需传入表单中的元组(值,标签)。你的值可以是int,字符串等等。 (你也错过了一个提交按钮,我认为这是偶然的。)
(2)我不确定你在意见中做了什么。你说,“在这里我必须根据团队中的成员来循环选择字段。例如,如果团队有3个成员,我将显示三个选择字段,由这三个成员自动选择。”您是说您需要在呈现表单时在下拉字段中向用户显示这些内容,还是在呈现模板时实际向用户显示查询结果?
因为你有一个表格,我假设你将通过POST向服务器提交数据。典型的视图模式创建一个空白表单对象,并在通过GET请求呈现模板时将其传递给用户。当用户输入数据并提交数据时,它将通过POST请求发送。我还注意到你使用了一个类来表达你的观点。我建议使用装饰器代替你的路由并让它调用一个函数。
例如,如果您在表单中有三个选项,并且想要在下拉列表中向用户显示这些选项,那么您需要实现以下内容:
form.py:
# Sample Form class; choices can be overridden later.
class TeamForm(Form):
user = SelectField(u'Team Member', default=(0, "Johnny"), choices=[(0, "Johnny"), (1, "Sarah"), (2, "Bill")])
submit= SubmitField('Submit')
view.py
@app.route('/team', methods=['GET','POST'])
def team_view(id):
user_selection = None
form = TeamForm()
# This code block will only execute on POST
if request.method == 'POST':
if form.validate_on_submit():
user_selection = form.user.data
form.user.data = ''
return redirect(url_for(some-other-page.html))
members =db.session.query(teams).filter_by(t_id = id).all()
# This next line will override the default choices in your form.
form.user.choices = [(member.id, member.name) for member in members]
return render_template("members.html",form=form)
member.html
选项1:
<!-- Assume you're using Flask-Bootstrap & WTForms -->
{% import "bootstrap/wtf.html" as wtf %}
<!-- Render your Team form; this is where you call to your form object -->
{{ wtf.quick_form(form) }}
选项2:
<!-- Manually construct your template -->
<form method="POST" action="/team">
<div>{{ form.user }}</div>
<div>{{ form.submit() }}</div>
</form>