WTForms SelectField

时间:2017-05-31 13:48:42

标签: python flask wtforms flask-wtforms

首先,还有另一个问题here询问有关检索元组值的问题,但我已尝试过该建议,但它不能满足我的需求。(建议使用[1]来调用第二个值,即{{ form.staff.data[1] }} - 这对我没用。

我创建了这个表单,它基本上是一个下拉菜单,其中包含员工姓名成员:

class StaffNames(Form):
        staff = SelectField(
        'staff',
        choices=[("", ""), ('1', 'John Thomas'), ('2', 'Chris Davis'), ('3', 'Lyn Taco')], validators=[DataRequired()]
        )

以下是我的观察文件中的相关信息,下拉列表位于索引页面上,结果最终显示在结果页面上:

@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
        form = StaffNames()
        if form.validate_on_submit():
                return redirect('/results')
        return render_template('index.html',title='Search Page',form=form)


@app.route('/results', methods=['GET', 'POST'])
def results():
        form =StaffNames()
        return render_template('results.html',
                           title='Results',form=form)

这是显示下拉列表的index.html:

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}
<center>
    <h1>Search</h1>
    <form action="results" method="post" name="indexsearch">
        {{ form.hidden_tag() }}
        <p>{{ form.ranumber }} Enter RA Number</p>
        {% for error in form.ranumber.errors %}
         <span style="color: red;">[{{ error }}]</span>
          {% endfor %}<br>
        <p>{{ form.staff }} Select your name</p>
        {% for error in form.staff.errors %}
         <span style="color: red;">[{{ error }}]</span>
          {% endfor %}<br>


        <p><input type="submit" value="Search"></p>
    </form>

{% endblock %}

这是我的results.html文件,用于显示所选的选项。

<!-- extend base layout -->
{% extends "base.html" %}

{% block content %}


<table border=1 >
<tr>
        <th>Disc Number</th>
        <th>Staff Name</th>
<tr>
<td> {{ form.ranumber.data }} </td>
<td> {{ form.staff.data }} </td>
</tr>
</table>




{% endblock %}

下拉列表正常工作,上一页输入的信息将打印在results.html页面上。但是,当我打电话时:

{{ form.staff.data }}

正在打印SelectField的第一个数据元组。我想要的是调用工作人员的实际名称,例如,而不是打印'2',它应该打印'John Thomas'。如何调用第二元数据(即本例中的名称)而不是第一元组?

由于

1 个答案:

答案 0 :(得分:0)

如果您只想在results.html中显示名称,可以在视图中获取名称,然后将其作为变量(staff_name)传递给模板,如下所示:

staff_choices=[("", ""), ('1', 'John Thomas'), ('2', 'Chris Davis'), ('3', 'Lyn Taco')]
class StaffNames(Form):
    staff = SelectField('staff',choices=staff_choices)    


@app.route('/', methods=['GET', 'POST'])
@app.route('/index', methods=['GET', 'POST'])
def index():
        form = StaffNames()
        if form.validate_on_submit():
                return redirect('/results')
        return render_template('index.html',title='Search Page',form=form)


@app.route('/results', methods=['GET', 'POST'])
def results():
        form =StaffNames()
        return render_template('results.html',
                           title='Results',form=form, staff_name = dict(staff_choices).get(form.staff.data))

在您的results.html模板中,使用{{ staff_name }}获取名称。

顺便说一句,你可以改变你的选择索引和你的名字一样,然后你的{{ form.staff.data }}会起作用来显示名字。