form.getlist() 不适用于 htmx 展开形式?
form.getlist() not working on htmx expanded form?
我在基于烧瓶的应用程序中有一个订单。表单以单行开始,供用户填写产品名称等。
然后有一个发送 htmx 请求的添加项目按钮。它可用于添加不定数量的附加行。
代码如下:
<table class="table" >
<thead class="thead-dark">
<tr>
<th>Product Name</th>
<th>Unit</th>
<th>Quantity</th>
</tr>
</thead>
<form autocomplete="off" action="/neworder" method="POST">
<tr>
<td><input type="text" name="product" ></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units"></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
</tbody>
</table>
<p>Order Date: <input type="text" name="date"></p>
<input type="submit">
</form>
htmx returns 这个:
<tr>
<td><input type="text" name="product"></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units" ></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
如您所见,一列中的所有输入都具有相同的名称。
表单提交时,我想用flask request来做:
@app.route('/neworder', methods=["POST"])
def new_order():
...
order_date = request.form.get("date")
items = request.form.getlist("product")
return f'<html>{order_date} - {items}</html>'
但是,唯一出现在 items
中的是第一行中输入的内容...
我尝试从不止一行开始,然后事情按预期工作,所以它一定与 htmx 返回的代码部分有关...
我认为这无关紧要 (?) 但 hx-get 使用的函数看起来像这样:
@app.route('/adminorder')
def admin_order():
return render_template('adminorder.html')
您的 HTML 模板无效,您应该将 form
开始标记移到 table 之外。我还添加了一个缺失的 <tbody>
标签。
<form autocomplete="off" action="/neworder" method="POST">
<table class="table" >
<thead class="thead-dark">
<tr>
<th>Product Name</th>
<th>Unit</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" name="product" ></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units"></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
</tbody>
</table>
<p>Order Date: <input type="text" name="date"></p>
<input type="submit">
</form>
我在基于烧瓶的应用程序中有一个订单。表单以单行开始,供用户填写产品名称等。
然后有一个发送 htmx 请求的添加项目按钮。它可用于添加不定数量的附加行。
代码如下:
<table class="table" >
<thead class="thead-dark">
<tr>
<th>Product Name</th>
<th>Unit</th>
<th>Quantity</th>
</tr>
</thead>
<form autocomplete="off" action="/neworder" method="POST">
<tr>
<td><input type="text" name="product" ></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units"></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
</tbody>
</table>
<p>Order Date: <input type="text" name="date"></p>
<input type="submit">
</form>
htmx returns 这个:
<tr>
<td><input type="text" name="product"></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units" ></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
如您所见,一列中的所有输入都具有相同的名称。
表单提交时,我想用flask request来做:
@app.route('/neworder', methods=["POST"])
def new_order():
...
order_date = request.form.get("date")
items = request.form.getlist("product")
return f'<html>{order_date} - {items}</html>'
但是,唯一出现在 items
中的是第一行中输入的内容...
我尝试从不止一行开始,然后事情按预期工作,所以它一定与 htmx 返回的代码部分有关...
我认为这无关紧要 (?) 但 hx-get 使用的函数看起来像这样:
@app.route('/adminorder')
def admin_order():
return render_template('adminorder.html')
您的 HTML 模板无效,您应该将 form
开始标记移到 table 之外。我还添加了一个缺失的 <tbody>
标签。
<form autocomplete="off" action="/neworder" method="POST">
<table class="table" >
<thead class="thead-dark">
<tr>
<th>Product Name</th>
<th>Unit</th>
<th>Quantity</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" name="product" ></td>
<td><input type="text" name="unit"></td>
<td><input type="text" name="number_of_units"></td>
</tr>
<tr hx-target="this">
<td><button type="button" hx-get="/adminorder" hx-swap="outerHTML" >Add Item</button></td>
</tr>
</tbody>
</table>
<p>Order Date: <input type="text" name="date"></p>
<input type="submit">
</form>