Flask Формы и выпадающие списки - PullRequest
0 голосов
/ 07 мая 2020

Я потратил почти 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...