如何使用SelectField for Flask并检索多个值

时间:2014-06-24 17:10:12

标签: python html flask flask-wtforms

我必须在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来执行此操作?

1 个答案:

答案 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')