从 WTForms SelectField 中的第二个元组中检索值
Retreive value from 2nd tuple in WTForms SelectField
首先,还有一个问题 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'。如何调用第二个数据元组(即在本例中为名称)而不是第一个?
谢谢
如果你只是想让名字显示在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 }}
会显示名称。
首先,还有一个问题 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'。如何调用第二个数据元组(即在本例中为名称)而不是第一个?
谢谢
如果你只是想让名字显示在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 }}
会显示名称。