Как получить HTML <tr>теги при нажатии кнопки во Flask? - PullRequest
0 голосов
/ 04 октября 2018

Мой HTML-шаблон имеет форму, которая выглядит следующим образом в браузере:

enter image description here

Я хочу получить строку "апельсины" в 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"] возвращает ошибку Bad Request.Есть ли способ получить такие значения тегов tr?

1 Ответ

0 голосов
/ 04 октября 2018

Вы можете создавать уникальные идентификаторы для каждого из ваших предметов, которые вы будете отображать.Каждый td и соответствующая ему кнопка будут иметь конечную цифру в id, которая может быть использована для получения нужного текста при нажатии кнопки.Кроме того, в этом случае проще использовать jquery с ajax для связи с бэкэндом:

В вашем 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>'})
...