flask доступ к переменной из HTML - PullRequest
0 голосов
/ 19 июня 2020

app.py

@app.route('/cma/connect', methods=['GET', 'POST'])
def connect_management():
    user = request.form.get('all_classes')
    print('user:', user)
    return str(user)
@app.route('/')
def index():
   return render_template('app.html',
                           all_classes=default_classes)

app. html

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

                      {% for o in all_classes %}
                      <option  value="{{ o }}" selected>{{ o }}</option>
                      {% endfor %}   
                  </select> 
                </div>
                <div class="form-group col-xs-3">
                  <label for="all_entries">the manager</label>

                    <button class="form-control" id="button" onclick="connect()">the reciever</button>
                    <p id="countdown"></p>

js код внутри приложения. html

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

                $.post("/cma/connect", $('#form').serialize(), function(data) {
                    //alert(data);
                    countdown = $("#countdown");
                    countdown.append(data + "<br/>");
                });
            });

my результат

user: None
127.0.0.1 - - [19/Jun/2020 10:03:11] "POST /cma/connect HTTP/1.1" 200 -

то, что я хочу

user: (the selected option from the dropdown menu)

, чтобы решить проблему

Я хочу вернуть выбранный параметр обратно в свой flask api для дальнейшего использования и отобразить его не переходя на новый tab

есть ли новые способы?

1 Ответ

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

Если вы не хотите использовать <form> в коде (что очень странно), вы можете попробовать

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

        var selected = $("#all_classes :selected").val();

        alert("selected: " + selected);

        $.post("/ra/connect", {"selected_cma": selected}, function(data) {
            //alert(data);
            countdown = $("#countdown");
            countdown.append(data + "<br/>");
        });
    });
</script>

Остальные должны быть такими же.

JavaScript отправляет {"selected_cma": selected}, поэтому Flask должен использовать то же имя в form.get('selected_cma')

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

и

<select name="selected_cma" class="form-control" id="all_classes">
    {% for o in all_classes %}
     <option  value="{{ o }}" selected>{{ o }}</option>
    {% endfor %}   
</select> 
</div>

<div class="form-group col-xs-3">
     <label for="all_entries">the manager</label>
     <button class="form-control" id="button">the reciever</button>
     <p id="countdown"></p>

И не нужно onclick="onclick()", потому что $('#button').click(...) уже назначить функцию. И если у вас есть функция onclick(), тогда это может вызвать другие проблемы.


EDIT:

Минимальный рабочий код

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>

   <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>

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

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

        var selected = $("#all_classes :selected").val();

        alert("selected: " + selected);

        $.post("/ra/connect", {"selected_cma": selected}, 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():
    print(request.form)
    print(request.data)
    user = request.form.get('selected_cma')
    print('user:', user)
    return str(user)

app.run()

Кстати: предыдущий вопрос: как получить доступ к выбранному раскрывающемуся списку обратно к flask

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