Я повторно отправил этот вопрос, потому что мне кажется, что я знаю, что происходит, но я не уверен, как это исправить.
Я создал подпрограмму, предназначенную для выполнения следующих действий: (1) Создатьвыбор из двух выпадающих меню (A и B) (2) Выбор из A и B затем используется в качестве входных данных для скрипта Python, который создает список для 3-го выпадающего меню (C) (3) Пользователь выбирает C изатем он используется для выбора информации из кадра данных Pandas, который будет заполнять 4-е выпадающее меню.(4) После четвертого выбора должен появиться красивый сюжет.
Я считаю, что проблема заключается в том, что форма перезаписывается после каждой отправки формы.Вот оболочка кода.
def pulldown_test():
results = []
year_now = datetime.now().year
years = np.arange(2011,year_now+1,1)
year_list = [(n, year) for n, year in zip(np.arange(0,len(years)), years)]
basins = ['AL','EP','CP','WP']
basin_list = [(n,basin) for n, basin in zip(np.arange(0,len(basins)), basins)]
form = pulldown_form()
if form.stormyear.choices is None:
print ('Here we initialize the form!')
form.stormyear.choices = year_list
form.stormbasin.choices = basin_list
if form.stormname.choices is None:
print ('Hi ZIPPY! No Stormname choices exist')
form.stormname.choices = [(-1, 'Name List')]
else:
form.stormname.choices = name_list
if form.stormdate.choices is None:
form.stormdate.choices = [(-1, 'Date List')]
else:
form.stormdate.choices = date_list
print('Here we assign the session info')
session['stormbasin'] = form.plotwant.data
session['stormyear'] = form.stormyear.data
if ( form.stormyear.data is not None ) & ( form.stormbasin.data is not None ):
if form.stormname.data > 0:
if form.stormdate.data > 0:
print ('From here we can plot')
else:
print ('Now we collect dates')
print ('Did we lose the stormname? ',form.stormname.data)
names = storms.name.unique()
form.stormyear.choices = year_list
form.stormbasin.choices = basin_list
form.stormname.choices = name_list
dates = storms[storms.name == names[form.stormname.data]].dates.values
date_list = [(n, date) for n, date in zip(np.arange(0,len(dates)), dates)]
form.stormdate.choices = date_list
else:
print ('Now we find a name')
form.stormyear.choices = year_list
form.stormbasin.choices = basin_list
storms = oti.collect_all_names_and_times( years[ form.stormyear.data ], basins[ form.stormbasin.data ] )
names = storms.name.unique()
name_list = [(n, name) for n, name in zip(np.arange(0,len(names)), names)]
form.stormname.choices = name_list
return render_template('pulldown_test.html', results=results, form=form)
Так вот, что происходит
Первый шаг работает отлично, я получаю информацию от A и B. Никаких проблем.Затем A и B вводятся в подпрограмму Python, и я получаю информацию для заполнения списка C (имя шторма)
Итак, я выбираю имя шторма ... и код затем отправляется в фрейм данных и выбирает доступные даты.для этого имени и заполняет список D
Однако, когда я возвращаюсь после рендеринга ... списки A, B и D заполняются, но список C (имя шторма) исчезает и сбрасывается в none.
I Предположим, это связано с повторной загрузкой одной и той же формы на каждом шаге.Если да, то какова правильная логика, чтобы обойти это препятствие и добраться до заговора?