У меня есть форма заказа в приложении на основе фляги. Форма начинается с одной строки, которую пользователь должен заполнить, указав название продукта и т. д.
Затем есть кнопка «Добавить элемент», которая отправляет запрос 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 возвращает это:
<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>
Как видите, все входные данные в столбце имеют одно и то же имя.
Когда форма отправлена, я хочу использовать запрос фляги, чтобы сделать это:
@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 за пределы таблицы. Я также добавил недостающий тег <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>