从HTML访问变量

2024-05-19 03:41:13 发布

您现在位置:Python中文网/ 问答频道 /正文

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>

app.html中的js代码

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

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

我的成绩

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

有什么新方法吗


Tags: theformidapphtmlconnectbuttonall
1条回答
网友
1楼 · 发布于 2024-05-19 03:41:13

如果您不想在代码中使用<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(),那么它可能会产生一些其他问题


编辑:

最小工作代码

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

顺便说一句:上一个问题:how to access the selected dropdown back to flask

相关问题 更多 >

    热门问题