【问题标题】:How to get HTML <tr> tags when pressing button in Flask?在Flask中按下按钮时如何获取HTML <tr>标签?
【发布时间】:2018-10-04 11:57:20
【问题描述】:

我的 HTML 模板有一个在浏览器上看起来像这样的表单:

当用户按下“橙子”旁边的“选择”按钮时,我想在 Python 中获取字符串“橙子”。

我的表单如下所示:

<form action="{{url_for('select')}}" method="POST">
  <div class="available_flights">
    {% for product in [["A100", "oranges"], ["A101", "apples"]] %}
    <td name = {{product[0]}} > {{product[1]}} {% include select_button ignore missing %} </td><br>
    {% endfor %}
  </div>
</form>

尝试 request.form["A100"] 返回错误请求错误。有没有办法获得这样的 tr 标签值?

【问题讨论】:

    标签: python forms flask tr


    【解决方案1】:

    您可以为要展示的每件商品创建唯一的 ID。每个td 及其对应的按钮将在id 中有一个尾随数字,可用于在单击按钮时获取所需的文本。此外,在这种情况下使用jqueryajax 与后端通信更简单:

    在您的 HTML 中:

    flights.html

    <html>
       <head>
           <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
       </head>
       <div class='available_flights'> 
        {%for row in data%}
           <td id='listing{{row.id}}' class='{{row.flight}}'>{{row.name}}</td>
           <button id = 'button{{row.id}}' class='select_td'>Select</button>
           <div id='info{{row.id}}'></div>
        {%endfor%}
       </div>
      <script>
        $(document).ready(function(){
          $('.available_flights').on('click', '.select_td', function(){
             var _id = this.id.match('\\d+');
             var flight_name = $('#listing'+_id).text();
             var abbrev = $('#listing'+_id).attr('class');
             $.ajax({
               url: "/get_flight",
               type: "get",
               data: {flight: flight_name, id:_id, name:abbrev},
               success: function(response) {
                $("#info"+_id).html(response.result);
               }
              });
          });
        });
      </script>
    </html>
    

    然后,在应用程序中:

    import flask, typing
    app = flask.Flask(__name__)
    
    class Flight(typing.NamedTuple):
      id:int
      flight:str
      name:str
    
    @app.route('/', methods=['GET'])
    def home():
       d = [["A100", "oranges"], ["A101", "apples"]]
       return flask.render_template('flights.html', data=[Flight(i, a, b) for i, [a, b] in enumerate(d)])
    
     @app.route('/get_flight')
     def get_flight():
       d = [["A100", "oranges"], ["A101", "apples"]]
       flight_id = int(flask.request.args.get('id'))
       flight_name = flask.request.args.get('flight')
       flight_abbreviation = flask.request.args.get('name')
       selected = dict(d)[flight_abbreviation]
       return flask.jsonify({"result":f'<p>Thank you for choosing {flight_name}</p>'})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多