通过 Python Flask 从一个 HTML 输入中获取多个值

Get multiple values from one HTML input through Python Flask

我有一个动态生成的行数,其中包含 table 中具有默认值 (order_quantity) 的文本框。基本上在 post 上,我希望 sql 中的项目 table 根据它们的 ID 使用这些文本框的值进行更新。

{% for i in items %}
        <tr>
            <td>
                ...
            </td>
            <td>
                ...
            </td>
            <td>
                <div class="form-group">
                    <input type="number" id="amount" name="amount"  value="{{ i.order_quantity }}">
                </div>
            </td>
            <td>
             ...
             </td>
        </tr>
        {% endfor %}

传递 order_quantity 或项目 ID 没有问题,但显然不能同时传递两者。

HTML:

<input type="number" id="amount" name="amount"  value="{{i.item_id}} {{ i.order_quantity }}">

Python:

amount = request.form.getlist('amount')
print amount
for i in amount:
    print i

总而言之,如何以简单的方式将数量及其相对 ID 传递出去,以便服务器端轻松提取每个文本框?

我想你可以通过添加一个包含 item_id

的隐藏输入字段来实现你想要的

示例:

<td>
    <div class="form-group">
        <input type="number" id="amount" name="amount"  value="{{ i.order_quantity }}">
        <input type="hidden" name="item_id" value="{{ i.item_id }}"/>
    </div>
</td>

当您在 Flask 中收到输入时,您可以将 ID 与数量相匹配,因为订单已保留。

amounts = request.form.getlist('amount')
item_ids = request.form.getlist('item_id')
for item_id, idx in enumerate(item_id):
    amount = amounts[idx]
    # do something with item_id and amount

因此,您可以通过一些巧妙的方式来执行此操作,例如,您可以用逗号分隔值中的 ID 和金额,例如,

<input type="number" id="amount" name="amount"  value="{{ i.order_quantity }}_{{ i.item_id }}">

然后在服务器端用一些逻辑拆分它。

for item in request.args:
    quantity, item_id = item.split('_')

但以上假设您不会编辑表格中的金额。在大多数情况下这可能是无用的。那么让我们看看一个更可编辑的解决方案...

我个人会这样做,将项目 ID 放在名称中

<input type="number" id="amount" name="amount-{{ i.item_id }}"  value="{{ i.order_quantity }}">

然后使用逻辑

for key, amount in request.args.items():
    item_id = key.split('-')[1]
    # And the amount var has the amount.

junnytony 的改编解决方案对我有用-

amounts = request.form.getlist('amount')
item_ids = request.form.getlist('item_id')
for idx, am in zip(item_ids, amounts):

    print idx, am

按照上面的建议使用隐藏的输入字段 (item_id)。