Настроить форму фляжки как таблицу
Я довольно долго кусаю ногти на этом. В моем приложении Flask у меня есть база данных продуктов, для которой в приложении у меня есть страница, которая запрашивает каждый столбец продукта в таблице.
Например, у меня будет продукт 1234
, для которого я мог бы просмотреть детали (например, столбцы базы данных) в example.com/items/1234
, которые дадут мне следующее:
<div class="container">
<div class="content">
<a href="/item">Back</a>
<table class="table">
<thead>
<tr>
<th>#</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Detail-1<th>
<td>Example</td>
</tr>
<tr>
<th scope="row">Detail-2</th>
<td>Example</td>
</tr>
То, с чем я борюсь, следующее:
Я хотел бы добавить новые продукты с одинаковым стилем таблицы. Для этого я создал форму следующего вида:
class NewArticleForm(FlaskForm):
detail_1 = StringField("Detail-1")
detail_2 = IntegerField("Detail-2")
...
submit = SubmitField("Submit")
Теперь я полностью потерял, как настроить внешний вид формы в шаблоне за пределами {{ wtf.quick_form(form) }}
. Я пробовал следующее:
<form method="POST">
<table class="table">
{% for name in form %}
<tr>
<th scope="row">{{ name.label }}</th>
<td>{{ name }}</td>
</tr>
{% endfor %}
</table>
</form>
Таблица выглядит хорошо (по крайней мере), но запрос не отправляется правильно, я полагаю. Страница правильно загружается с помощью "POST /url HTTP/1.1"
, но, похоже, она не проходит правильно.
Что я имею в виду, так это то, что, хотя запрос отправляется правильно, я вижу, что я запускаю приложение через сервер Flask. Однако кажется, что в базу данных ничего не передается. Страница просто перезагружается с введенными данными, все еще в полях и ничего не передается в базу данных. Если я просто использую wtf.quick_form
, тогда данные будут правильно отправлены в базу данных.
Итак, как я могу правильно настроить внешний вид формы и/или решающий шаг, я пропустил?
Ответы
Ответ 1
Хорошо, это на самом деле смущает. Мне удалось решить это самостоятельно, и мальчик был глупым решением.
Причина, по которой ничего не передавалась в базу данных, заключалась в том, что если некоторые поля были пустыми (которые не были указаны в форме), они были интерпретированы как строковые поля, что, конечно же, дало бы ошибку для целых полей.
Проблема заключалась в том, что, как вы можете видеть в моем шаблоне кода, я не включал код, чтобы показывать какие-либо ошибки при отправке полей. Я изменил код шаблона следующим образом:
{% macro render_field(field) %}
<th scope="row">{{ field.label }}
<td>{{ field(**kwargs)|safe }}
{% if field.errors %}
<ul class=errors>
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
{% endif %}
{% endmacro %}
<form method="POST">
<table class="table">
{{ form.csrf_token }}
{% for name in form %}
<tr>
{{ render_field(name) }}
</tr>
{% endfor %}
</table>
</form>
Теперь я буду склонять голову от стыда и надеяться, что когда-нибудь это может кому-то помочь.