我在以下问题上花费了将近2天,现在完全承认失败了。我找不到有关正在解决的问题的教程或文档,因此,我提供了一个完整的可复制示例,希望有人可以提供代码实现。
我的目标是:1)读入数据文件2)在读入的数据文件中填充一个带有变量(列名)的下拉菜单3)用户从下拉菜单中选择一个变量以及该列将被计算。
我已经解决了1和2,目前已经对一列的平均值进行了硬编码。这些在下面的示例应用程序中。但是我无法弄清楚用户在下拉菜单中选择的选项如何传递给计算均值的函数。
我正在使用代码段showVar=var2use
只是为了查看下拉菜单中选择的变量是否被识别,而不能识别,当打印到屏幕时,该变量的值始终为None。我怀疑我的request.get在某种意义上是有缺陷的,但是我对Flask太陌生了,无法识别它是怎么做到的。
from flask import Flask, render_template, request
import numpy as np
import pandas as pd
app = Flask(__name__)
@app.route('/', methods=['POST', 'GET'])
def data_tools_upload():
if request.method == 'POST':
orig_df = pd.read_csv(request.files.get('file'))
var2use = request.form.get("vars2use")
vars = list(orig_df.columns)
mean = orig_df[vars[4]].mean()
dims = orig_df.shape
message = 'You have data! There are %s rows and %s columns and the variable %s has mean %s' % (dims[0],dims[1],vars[4],round(mean,3))
table = orig_df.head(10).to_html(classes='data', header = "true")
return render_template('upload2.html', tables = [table], message = message, vars = vars, showVar=var2use)
return render_template('upload2.html')
if __name__ == '__main__':
app.run(debug=True)
# or just app.run()
,upload2.html的内容为:
<!DOCTYPE html>
<html>
<body>
<h3> Read in a data file </h3>
<br>
<form method=post enctype=multipart/form-data>
<input type=file name=file class = "btn btn-outline-secondary">
<input type=submit value=Upload class = "btn btn-outline-secondary">
</form>
<br>
<form action = "{{url_for('data_tools_upload')}}" method = "POST">
<select name= vars method="POST" action="\">
{% for var in vars %}
<option value= "{{ var }}" SELECTED>{{ var }}</option>"
{% endfor %}
</select>
</select>
</form>
<center>
<h1>
{{message}}
{{showVar}}
</h1>
<br>
<small>
{% for table in tables %}
{{ table|safe }}
{% endfor %}
</small>
</center>
</body>
</html>