как получить доступ к выбранному раскрывающемуся списку обратно к flask - PullRequest
0 голосов
/ 17 июня 2020

Я пытался получить доступ к выбранному раскрывающемуся списку обратно к Flask одним нажатием кнопки. Основываясь на одном из предложений, я сделал следующее:

app.py

    @app.route('/ra/connect',methods=['GET','POST'])
    def connect_management():
       user = (request.form['selected_class']).first()
       return (str(user))

app. html

              <select name="selected_class" class="form-control" id="all_classes">

                  {% for o in all_classes %}
                  <option  value="{{ o }}" selected>{{ o }}</option>
                  {% endfor %}   
              </select> 

Мне нужно использовать выбранный вариант раскрывающегося списка и заполните еще несколько результатов из Flask api одним нажатием кнопки и отобразите их в теге countdown под кнопкой. Подводя итог, мне нужно получить доступ к раскрывающемуся значению обратно в Flask api без новой вкладки.

<button class="form-control" id="button" onclick="connect4()">Get gateways</button>
                <p id="countdown"></p>

Я получал

TypeError: 'ImmutableMultiDict' object is not callable

даже после того, как следовал советам

1 Ответ

0 голосов
/ 17 июня 2020

Я не могу получить вашу ошибку с вашим кодом. Возможно, вы получили ошибку для другого кода, но вы не показали полное сообщение об ошибке, которое могло бы ее подтвердить.


Чтобы обновить HTML без перезагрузки страницы, вам нужно JavaScript или jQuery для отправки AJAX запрос, получите ответ и поместите его в существующий HTML

Минимальный рабочий пример:

from flask import Flask, request, render_template_string

app = Flask(__name__)

@app.route('/')
def index():
    return render_template_string('''<html>
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script>

<form action="/ra/connect" method="POST" id="form">
   <select name="selected_class" class="form-control" id="all_classes">
   {% for o in all_classes %}
      <option  value="{{ o }}" selected>{{ o }}</option>
   {% endfor %}   
   </select> 
   <button class="form-control" id="button">Get gateways</button>
</form>

<p id="countdown"></p>

<script>
    $('#button').click( function(event) {
        event.preventDefault();

        $.post("/ra/connect", $('#form').serialize(), function(data) {
            //alert(data);
            countdown = $("#countdown");
            countdown.append(data + "<br/>");
        });
    });
</script>
</html>''', all_classes=['Hello', 'World'])

@app.route('/ra/connect', methods=['GET', 'POST'])
def connect_management():
    user = request.form.get('selected_class')
    print('user:', user)
    return str(user)

app.run()

BTW: Продолжение в flask доступ к переменной из HTML

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