Я потратил почти 2 дня на следующую задачу и теперь полностью признаю свое поражение. Я не могу найти учебные пособия или документацию по проблеме, над которой я работаю, поэтому я предоставляю полный воспроизводимый пример в надежде, что кто-то сможет предложить реализацию кода.
Моя цель: 1) прочитать в файле данных 2) заполнить раскрывающееся меню с переменными (названиями столбцов) в файле данных, прочитанном в 3) Пользователь выбирает переменную из раскрывающегося меню и вычисляется среднее значение этого столбца.
Я решил 1 и 2 и в настоящее время жестко запрограммировал среднее значение столбца. Это в примере приложения ниже. Однако я не могу понять, как параметр, выбранный пользователем в раскрывающемся списке, может перейти к функции, вычисляющей среднее значение. down даже распознается, и это не так, он всегда имеет значение 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>