Динамическое изменение раскрывающихся меню с событиями браузера в Flask - PullRequest
0 голосов
/ 03 августа 2020

Ниже представлена ​​упрощенная версия разработанного мной приложения. Выпадающие меню динамически обновляются на основе некоторых файлов данных, доступных в сеансе браузера.

Ниже я жестко запрограммировал идею того, с чем я имею дело, чтобы проиллюстрировать природу моей проблемы. Ниже приведены два раскрывающихся меню, в которых можно задать вопрос. Я хочу, чтобы пользователь сначала взаимодействовал с раскрывающимся списком 1. Если пользователь выбирает Option 1, то во втором раскрывающемся списке автоматически отображаются параметры A, B, C. Если пользователь выбирает Option 2, то второе раскрывающееся меню будет автоматически обновлено, чтобы отразить параметры D,E,F,G.

Я думаю, все это можно сделать в браузере, и изменения в раскрывающемся списке 1 могут затем повлияйте на параметры, доступные в раскрывающемся списке 2. Я новичок в javascript / AJAX и не совсем уверен, как с этим справиться, и есть ли другая структура, которую следует рассмотреть.

Надеюсь, что кто-то может предоставить код для меня, чтобы обобщить мою реальную проблему, где количество вариантов в выпадающих списках 1 и 2 будет различаться по длине.

Вот минимальное Flask app.py

from flask import Flask, render_template, request, session, current_app, flash,redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, TextField, SubmitField, SelectField, IntegerField, BooleanField, RadioField, FileField
from wtforms.validators import DataRequired, Length
server = Flask(__name__)
server.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

class simpleForm(FlaskForm):
    varlist1 = SelectField('Choose',  [DataRequired()], coerce=str)
    varlist2 = SelectField('Choose',  [DataRequired()], coerce=str) 
        
@server.route('/menu')
def menu():
    form = simpleForm()
    vars = ['Option 1','Option 2']
    var2list = [['A', 'B', 'C'],['D','E', 'F', 'G']] 
    form.varlist1.choices = vars
    form.varlist2.choices = var2list[0]    
    return render_template('menu.html', form = form)        

if __name__ == '__main__':
    server.run(debug=True)

И минимальный menu.html файл

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>

<title>My Application</title>
<body>

Hello. Choose something:

<br><br>
<br>

<form>
<div>
{{ form.varlist1.label}}
{{ form.varlist1 }}
</div>
<br>
<div>
{{ form.varlist2.label}}
{{ form.varlist2 }}
</div>
</form>

</body>
</html>





  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...