Получение нескольких HTML-полей с одинаковыми именами с помощью getlist с flask в python - PullRequest
0 голосов
/ 03 мая 2018

У меня есть форма с динамически добавленными строками с одинаковыми именами. Я пытаюсь использовать getlist, но получаю только первое значение.

Вот мой HTML-код формы:

<html>
<div>
   <form method=POST>
</div>
<table id="linkTable">
    <tbody><tr class="tr_clone" id="addrow">
        <td>First: </td>
        <td><input class="from-field" id="from" type="text" name="first"></td>
        <td>Last: </td>
        <td><input class="to-field" id="to" type="text" name="last"></td>
        <td>Email: </td>
        <td><input class="port-field" id="ports" type="text" name="email"></td>
    </tr>
</tbody></table>
<script>
    $("#addbtn").click(function(){
        $("#addrow").clone().find("input:text").val("").end().prependTo("#linkTable");
    })
</script>
</form>
</html>

Вот мой код Python:

from flask import Flask, request, render_template

for arg in request.form:
    print arg, request.form.getlist(arg)

Может кто-нибудь объяснить, что даже если я использую getlist, я получу только первое значение?

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

После долгого поиска смог ответить на свой вопрос, посмотрев в Интернете.

У меня было следующее:

<html>
<!-- note how the form has been moved out of the div so that the navigator does not close the div -->
<form method=POST>
<table id="linkTable">
    <tbody><tr class="tr_clone" id="addrow">
        <td>First: </td>
        <td><input class="from-field" id="from" type="text" name="first"></td>
        <td>Last: </td>
        <td><input class="to-field" id="to" type="text" name="last"></td>
        <td>Email: </td>
        <td><input class="port-field" id="ports" type="text" name="email"></td>
    </tr>
</tbody></table>
<script>
    $("#addbtn").click(function(){
        $("#addrow").clone().find("input:text").val("").end().prependTo("#linkTable");
    })
</script>
</form>
</html>

Оказывается, что закрытие div закроет тег формы, поэтому строки были динамически добавлены за пределы формы. Переместив директиву формы за пределы div, я начал получать несколько значений, когда форма была отправлена ​​

Я также в конечном итоге нашел более подробный ответ на Форма выпуска (закрытие себя рано в таблице)

0 голосов
/ 03 мая 2018

Удобно использовать zip() каждый раз, когда вы хотите проанализировать один и тот же атрибут name в html. Посмотрите на это:

@app.route('/creation', methods=['GET', 'POST'])
def create():
    try:
        if request.method == 'POST':
            for first, last, email in zip(request.form.getlist('first'),
                                          request.form.getlist('last'),
                                          request.form.getlist('email')):
                print(first, last, email)
        else:
            return render_template('create.html')
    except Exception as e:
        print(str(e))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...