我正在使用 Flask 创建 HTML 表单(下拉菜单),该表单中的值是从列表值(由python函数输出)填充的。 python app.py代码中的变量为“ two_Dimension_list ”。示例值为: [[''001','Source1'],['342','Source2'],['968','Source5']] (基本上,数据是“ ID”和“数据源名称”)。 app.py代码如下所示:
@app.route('/')
def index():
#drop down list (call Paxata to get a list of projects)
two_dimensional_list = PaxMatch.get_datasource_configs(authorization_token,paxata_url)
return render_template('index.html', datasources1=two_dimensional_list, datasources2=two_dimensional_list)
<select name= datasource1 method="POST" action="/">
{% for datasource1 in datasources1 %}
<option value= "{{datasource1[0]}}">{{datasource1[1]}</option>"
{% endfor %}
</select>
这工作正常,并且HTML页面正在正确构建,即:
<option value="001">Data Source 1</option>"
<option value="342">Data Source 2</option>"
<option value="968">Data Source 5</option>"
我面临的挑战是,当我单击“提交”按钮时,传递给“ Step2.html”(下一页)的唯一内容是“值”(即“ ID”),而不是说明”。我都需要。
我敢肯定,这是一个非常尴尬的简单问题,但似乎无法解决该问题,而又无需再次调用我的python函数,效率非常低。
感谢您的帮助,谢谢!
答案 0 :(得分:0)
这就是选择输入的工作方式,因此您必须再次调用该函数。通过使用ID为键,描述为值的字典,可以使其更高效,更语义化。 :)
答案 1 :(得分:0)
这是一个可能的解决方法。
在函数之外定义二维列表变量:
two_dimensional_list = [['001','Source1'],['342','Source2'],['968','Source5']]
定义您的render_template()
函数:
@app.route('/')
def index():
return render_template('index.html', two_dimensional_list=two_dimensional_list)
设置表单模板:
<form method="POST" action="{{ url_for('data') }}">
<select name="datasource" method="POST" action="/post">
{% for datasource1 in two_dimensional_list %}
<option value= "{{datasource1[0]}}">{{datasource1[1]}}</option>"
{% endfor %}
</select>
<button type="submit">Submit</button>
</form>
最后但并非最不重要:
request.form.get
description_value(select)
@app.route('/data', methods=['GET', 'POST'])
def data():
id_value = request.form.get('datasource')
def description_value(select):
for data in two_dimensional_list:
if data[0] == select:
return data[1]
return description_value(id_value)