在python中使用带有烧瓶的getlist获取具有相同名称的多个html字段

时间:2018-05-03 04:09:28

标签: python flask html-form

我有一个动态添加了具有相同名称的行的表单。我尝试使用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 :(得分:1)

每次要在html中解析相同的zip()属性时,使用name会很方便。看看这个:

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

答案 1 :(得分:0)

在寻找了很长时间后,能够通过网络查看我自己的问题。

我有以下内容:

<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之外移动form指令,我在表单提交时开始获取多个值

我最终还是在Form Issue (closing itself early in table)

找到了更详细的答案