Обновите представление фляги со значением из раскрывающегося списка, а не с формой
У меня есть функция для фильтрации файла .csv по годам, чтобы затем визуализировать график с боке/изменить df перед его построением. На ноутбуке jupyter я использую ipywidgets с функцией взаимодействия, чтобы изменить его, и он работает нормально, проблема в том, что когда я переношу его в Flask, он не будет работать так же, как автономный боке, что означает не подключаться к серверу боке. Ниже пример блокнота Jupyter:
def dfTeamsChamp(year):
dfR = pd.read_csv('races.csv', index_col=0, delimiter=',')
dfR = dfR[dfR['year'] == int(year)]
dfR.drop('url', axis=1, inplace=True)
dfR.sort_values('date', inplace=True)
#df contructors teams
dfC = pd.read_csv('constructors.csv', delimiter=',', index_col=0)
#df constructor standings
dfC_S = pd.read_csv('constructor_results.csv', delimiter=',', index_col=0)
dfC_S.set_index('raceId', inplace=True)
#dfC_S = pd.read_csv( 'constructor_standings.csv', index_col=1, delimiter=',')
#filter year qualify
CSF = np.array(dfR.index)
dfC_S1 = dfC_S.index.isin(CSF)
dfC_S1 = dfC_S[dfC_S1]
c_F = np.array(dfC_S1.constructorId.unique())
dfC1 = dfC.index.isin(c_F)
dfC1 = dfC[dfC1]
#dictionary constructorId x constructor name
diC_N = pd.Series(dfC1.name.values, dfC1.index.values).to_dict()
#add constructor name to df constructor standings
dfC_S1['Team'] = dfC_S1.constructorId.map(diC_N)
#costructor cham
dfC_S2 = dfC_S1.sort_values('points', na_position ='first')
dfC_S2 = pd.DataFrame(dfC_S2.groupby('Team')['points'].sum())
dfC_S2.sort_values('points', ascending=False, inplace=True)
return dfC_S2
f1Years = range(1950,2022)
f1Y_s = ["{:04d}".format(x) for x in f1Years][::-1]
interact(dfTeamsChamp, text='Select year', Year=f1Y_s )
Здесь он работает как шарм, но как только я перенесу его на Flask, ipywidgets не отобразит или не позволит мне обновить его, поскольку он не будет встраивать функцию python. Я создал простой выбор/раскрывающийся список в HTML, но не знаю, как получить значение и добавить его в представление. Если кто-то может помочь мне с этим, пожалуйста. Под представлением Flask:
@app.route('/', methods=['GET', 'POST'])
def index():
f1Years = range(1950,2022)
f1Y_s = ["{:04d}".format(x) for x in f1Years][::-1]
script, div = components(load_df(f1Y_s[0]))
return render_template('index.html', script=script, div=div, resources=CDN.render(), f1Y_s=f1Y_s)
HTML-шаблон:
<select name="Years" method="GET" action="/">
<option value="{{f1Y_s[0]}}" selected>{{f1Y_s[0]}}</option>
{% for year in f1Y_s[1:] %}
<option value="{{year}}">{{year}}</option>
{% endfor %}
</select>