#python #flask #dynamic #graph #dashboard
#python #flask #динамический #График #Информационная панель
Вопрос:
Я создаю панель мониторинга для отображения разной статистики за разные месяцы. Мне нужно выбрать месяц из выпадающего списка, и, соответственно, файл, связанный с этим месяцем, покажет свои графики на моем home.html страница.
Однако мой выпадающий список не может прочитать месяц, могу ли я узнать, что я делаю не так?
Вот мой код для app.py
:
from flask import Flask, render_template, url_for, request, redirect
from graph_itunes import graphing
import matplotlib
application = Flask(__name__)
def get_itune_installs(ios_path):
with open (ios_path, 'r') as f:
install_itunes = json.load(f)
results = install_itunes['results'][0]['data']
df_itunes = pd.DataFrame.from_dict(results,orient = 'columns')
return df_itunes
@application.route('/', methods=['GET', 'POST'])
def home():
current_userinput = request.form.get('userinput')
path_ios = 'iTunesConnect/Installs/'
ios_path = os.path.join(path_ios, current_userinput)
itunes_installs = get_itune_installs(ios_path)
graph_itunes_installs = graphing(itunes_installs)
return render_template('home.html',
graph1 = graph_itunes_installs,
userinput = current_userinput)
if __name__ == '__main__':
application.run(debug = True)
Вот мой home.html
:
<form name = 'userinput' action="/" method = 'post'>
<select name = "userinput" id = 'userinput'>
<option value="January">January</option>
<option value="February">February</option>
<option value="March" selected >March</option>
<option value="April">April</option>
<option value="May">May</option>
{% for input in userinput %}
<option selected value= "{{input}}">{{input}}</option>
{% endfor %}
</select>
<p><a class ="btn btn-default" type = "submit" value = "Select" >Submit</a></p>
</form>
Может кто-нибудь, пожалуйста, помочь мне и предложить что-нибудь?
Комментарии:
1. Не могли бы вы опубликовать полный пример? Что
userinput
находится внутри вашего home.html ? Как вы визуализируете этот шаблон?2. верните render_template(‘home.html ‘, userinput = current_userinput )
3. @AndreySemakin у вас есть какое-либо решение для этого?
4. Пожалуйста, добавьте полный код
app.py
. В противном случае трудно определить проблему.5. @arsho ниже приведен app.py код
Ответ №1:
Я пропускаю любой код, связанный с matplotlib
и graphing
пакетом.
Скорее, я показываю пример обработки выпадающего значения в Flask. В следующем примере будет показано значение, основанное на месяце, выбранном пользователем.
app.py
:
from flask import Flask, render_template, url_for, request, redirect
application = Flask(__name__)
def get_monthly_data(month):
data = {
"January": "First month of the year",
"February": "Second month of the year",
"March": "Third month of the year",
"April": "Fourth month of the year",
"May": "Fifth month of the year"
}
return data.get(month, "Data is not found").strip()
@application.route('/', methods=['GET', 'POST'])
def home():
if request.method == "POST":
month = request.form.get('month')
return render_template('home.html', data = get_monthly_data(month))
return render_template('home.html')
if __name__ == '__main__':
application.run(debug = True)
home.html
:
<html>
<head>
<title>Dropdown Example</title>
</head>
<body>
{% if data %}
<div>
<h3>Monthly Data</h3>
<p>{{ data }}</p>
</div>
{% endif %}
<form action="/" method="post">
<select name="month">
<option value="January">January</option>
<option value="February">February</option>
<option value="March" selected >March</option>
<option value="April">April</option>
<option value="May">May</option>
</select>
<input type="submit" value="Select Month">
</form>
</body>
</html>
Вывод:
Форма с выпадающим списком месяца:
Отображение результата на основе пользовательского выбора:
Комментарии:
1. в def home (): мне нужно получить имя файла из моего каталога, поскольку пользователь меняет месяц из выпадающего списка. Например, когда use выбирает Jan,
@application.route('/', methods=['GET', 'POST']) def home(): if request.method == "POST": month = request.form.get('month') ios_path= os.path.join(ios_ratings, month) #here I graph from ios_path which is a csv file return render_template('home.html', graph1 = graph_ios, data = get_monthly_data(month)) return render_template('home.html')
это выдает ошибку «ссылка перед локальной переменной «месяц»? Почему?2. Python — это все об отступах. Код, который вы вставили в комментарий, не читается. Вы запустили код, который я включил в свой ответ?
3. Да, действительно, у меня есть. Он отлично работает сам по себе. Моя проблема в том, что когда пользователь выбирает месяц из выпадающего списка, путь к выбранному месяцу должен быть привязан к моей функции чтения файлов и отображать график соответствующим образом. Однако он выдает мне сообщение об ошибке «месяц, на который ссылается локальный параметр «месяц»?
4. Согласно сообщению об ошибке, я предполагаю, что вы обновляете значения
month
переменной перед инициализацией. Обновите свой вопрос обновленным кодом, ожидаемым поведением и описанием ошибки.5. Спасибо @arsho, мне удалось выяснить ошибку. И это работает! Большое спасибо 🙂