我必须在Flask中设计一个网页。在这个WebPage中,我必须提示用户选择多个字段,如分支,名称,并从用户中检索文本字段。
以下是我的表单类(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的新手。如视图所示,我需要基于branch_list和name_list实现2个选择字段。我需要一个提交按钮来从两个选择字段和一个文本字段中选择数据,我需要将数据检索回我的view.py.我该怎么做呢?
作为下一步,名称选择字段取决于在分支选择字段上选择的值。如何动态更新html中的selectfield来执行此操作?
答案 0 :(得分: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")`
注意:请确保您的import语句(位于文件顶部)具有以下内容:
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
类中有语法错误:
[FIND]
name = SelectField('Name)
[替换]
name = SelectField('Name')