Как получить выбранное значение раскрывающегося кода bootstrap в коде, используя Python & Flask? - PullRequest
0 голосов
/ 19 января 2020

Я новичок в Python и Flask программировании. При разработке своего веб-сайта я пытаюсь получить значение, выбранное в раскрывающемся списке bootstrap в коде python. Это то, что я пытался -

Python код - rout.py

   @app.route("/index", methods=['GET','POST'])
   def index():
       form = IndexForm()
       data = ['Red', 'Green', 'Blue']
       if form.validate_on_submit():
           posts = get_data(color=request.form.get("color_dropdown"))
           return render_template('index.html', title='My Form', form=form, posts=posts, data=data) 

       return render_template('index.html', title='My Form', form=form, data=data)

HTML код - index. html

Раскрывающийся список заполняется, как и ожидалось, элементами списка 'data'.

   <div class="dropdown">
        <div class="input-group-btn">
            <button class="btn btn-info btn-md dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" name="color_dropdown" >
            Select Color
            <span class="caret"></span>
            </button>
            <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
                {% for datum in data %}
                   <a class="dropdown-item" href="#">{{ datum }}</a>
                {% endfor %}
            </div>
        </div>
    </div>

Пока все хорошо. enter image description here

Когда я выбираю цвет, например. «Красный», он также виден на кнопке с использованием jscript -

   <script>
        $(".dropdown-menu a ").click(function(){
            $(this).parents(".input-group-btn").find('.btn').text($(this).text());
        });
    </script>

И он выглядит выше. enter image description here

Теперь, когда я пытаюсь извлечь значение выбранного параметра из выпадающего списка, используя - color=request.form.get("color_dropdown"), он всегда возвращает None.

Форма класса - forms.py

   class IndexForm(FlaskForm):
      car = StringField('Car', validators=[DataRequired()])
      submit = SubmitField('Submit')

Как я могу получить значение выбранного параметра («Красный» в приведенном выше случае) в rout.py и назначить его переменной цвета? Заранее спасибо.

1 Ответ

0 голосов
/ 19 января 2020

Я достиг более или менее того, что вы ищете, без JS, используя синтаксис variable = form_name.form_field.dataroutes.py).

Надеюсь, это поможет.

Отредактировано:

Вероятно, лучше всего получить прямой доступ к атрибутам формы. Кроме того,

forms.py:

class IndexForm(FlaskForm):
      car_options = SelectMultipleField(
                 u'Select Color', choices=[('Red', 'red'), ('Blue', 'blue'), ('Green', 'green')], size=1)
      submit = SubmitField('Submit')

index. html:


    <form action='/' , method='POST'>
        {{form.hidden_tag() }}
        <button class="btn btn-info btn-md dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" name="color_dropdown" >
            Select Color
            <span class="caret"></span>
            </button>
        <div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
        {% for subfield in form.choices %}
              <a class="dropdown-item" href="#">
              {{ subfield.label }}
              </a>
        {% endfor %}
        </div>
        <div class="submit">
            {{ form.submit(class="btn btn-info") }}
        </div>
    </form>

rout.py:

@app.route("/index", methods=['GET','POST'])
   def index():
       form = IndexForm()
       if form.validate_on_submit():

           color_choice = form.car_options.data
           if color_choice = 'green':
               print("Sick bro")
           else:
               pass

           #since you can access the choices as an attribute of the form,
           #there is no need to define "posts" (I named it color choice) unless 
           #you are going to use it here.

           return redirect('index.html')

       return render_template('index.html', title='My Form', form=form, data=data)

...