通过 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)。
我有一个动态生成的行数,其中包含 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)。