提问者:小点点

如何访问选择的下拉列表返回烧瓶


我一直试图通过单击按钮将所选的下拉列表返回到flask。 根据其中一个建议,我做了如下的工作

应用程序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> 

我需要使用选定的下拉选项,在单击按钮时从flaskapi中填充更多的结果,并将它们显示在按钮下方的countdown标记中。 总而言之,我需要在没有新选项卡的情况下将下拉值访问回flaskapi。

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

我一直在

TypeError: 'ImmutableMultiDict' object is not callable

即使在遵循建议之后


共1个答案

匿名用户

我不能用你的代码得到你的错误。 可能您得到不同的代码错误,但您没有显示完整的错误消息,可以确认它。

要更新HTML而不重新加载页面,您需要JavaScriptjQuery来发送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()