如何在Flask中使用SelectField并获取多个值
我需要用Flask设计一个网页。在这个网页上,我要让用户选择多个字段,比如分支、名字,还要从用户那里获取一个文本字段。
下面是我的表单类(forms.py):
class ProjectSelect(Form):
branch = SelectField('Branch')
name = SelectField('Name)
comments = TextField('Comments')
我的View.py如下:
@app.route('/user/<email>', methods=["GET", "POST"])
def user(email):
branch_list = Dummy.query.all()
name_list = Dummy1.query.all()
form = ProjectSelect()
form.branch.choices = branch_list
form.name.choices = name_list
if form.validate_on_submit():
# How to get data??
return redirect(url_for('index'))
return render_template('index.html')
目前,我还没有为这个设置设计HTML模板。因为我对HTML和Flask都很陌生,所以不太确定该怎么写。根据视图的要求,我需要实现两个选择框,一个是分支列表,另一个是名字列表。我还需要一个提交按钮,用来从这两个选择框和一个文本框中获取数据,并把这些数据传回我的view.py。我该怎么做呢?
接下来,名字选择框的内容是依赖于分支选择框中选的值的。我该如何在HTML中动态更新选择框,以实现这个功能呢?
1 个回答
你在这个帖子里问了几个问题。
1) 要获取数据(在 if form.validate_on_submit():
之后),你可以使用类似下面的代码:
`if form.validate_on_submit():
branch = form.branch.data
name = form.name.data
# do something with branch and name
return redirect(url_for('index'))`
2) 你的视图应该看起来像这样:
`<form method="post">
{{ form.csrf_token }}
{{ form.branch.label }}{{ form.branch }}
{{ form.name.label }} {{ form.name }}
{{ form.comments.label}} {{ form.comments }}
{{ form.submit }}
</form>`
3) 在你的 ProjectSelect
类定义中缺少提交字段。你需要添加:
`submit = SubmitField("Submit")`
注意:确保你在文件顶部的导入语句中包含以下内容:
from wtforms import SubmitField, SelectField
4) 在你的 views.py
文件的最后一行,那里有 return render_template('index.html')
,你需要传入表单对象:
return render_template('index.html', form=form)
5) 要实现一个带有预定义选项的 SelectField
,可以使用这个:
name = SelectField('Name', choices=name_choices)
注意:这假设 name_choices
是像这样定义的列表:
name_choices = ['选择一', '选择二']
6) 你的代码示例在 ProjectSelect
类中有一个语法错误:
[查找]
name = SelectField('Name)
[替换为]
name = SelectField('Name')