我一直试图通过单击按钮将所选的下拉列表返回到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>
我需要使用选定的下拉选项,在单击按钮时从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
即使在遵循建议之后
我不能用你的代码得到你的错误。 可能您得到不同的代码错误,但您没有显示完整的错误消息,可以确认它。
要更新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()