使用Flask将多个变量传递到下一个HTML页面(尤其是“ Value”和“ Selected”,而不仅仅是“ Selected”)

时间:2019-05-05 22:06:52

标签: python html flask

我正在使用 Flask 创建 HTML 表单(下拉菜单),该表单中的值是从列表值(由python函数输出)填充的。 python app.py代码中的变量为“ two_Dimension_list ”。示例值为: [[''001','Source1'],['342','Source2'],['968','Source5']] (基本上,数据是“ ID”和“数据源名称”)。 app.py代码如下所示:

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)

index.html

  <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函数,效率非常低。

感谢您的帮助,谢谢!

2 个答案:

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

最后但并非最不重要:

  1. 使用request.form.get
  2. 获取选定的 ID
  3. 使用description_value(select)
  4. 访问说明
  5. 打印结果

@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)