将瓶子形式自定义为表格

ron*_*gon 12 python flask wtforms

我一直在咬这个钉子很长一段时间.在我的Flask-app中,我目前有一个产品数据库,在应用程序中我有一个页面,可以将每个产品列查询到一个表中.

例如,我有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>
Run Code Online (Sandbox Code Playgroud)

我正在努力的是以下几点:

我希望能够添加具有相同表格风格的新产品.为此,我创建了一个如下形式:

class NewArticleForm(FlaskForm):
    detail_1 = StringField("Detail-1")
    detail_2 = IntegerField("Detail-2")
    ...
    submit = SubmitField("Submit")
Run Code Online (Sandbox Code Playgroud)

我现在完全失去了如何在模板中自定义表单外观{{ 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>
Run Code Online (Sandbox Code Playgroud)

该表看起来不错(至少是那个),但我认为请求没有正确发送.页面加载正确,"POST /url HTTP/1.1"但似乎没有正确.

我的意思是,尽管请求正确发送,我可以看到我是否通过Flask服务器运行应用程序.但是,似乎没有任何内容传输到数据库.页面只是重新加载输入的数据仍然在字段中,没有任何内容传输到数据库.如果我只是使用wtf.quick_form然后将数据正确发送到数据库.

那么我怎样才能正确定制表格外观和/或关键步骤?

ron*_*gon 4

嗯,这实际上很尴尬。我设法自己解决了这个问题,天哪,这是一个愚蠢的解决方案。

没有任何内容传输到数据库的原因是,如果某些字段留空(表单中未标记为必填字段),它们将被解释为字符串字段,这当然会给出整数字段错误。

问题是,正如您在我的模板代码中看到的那样,我没有包含在提交字段时显示任何错误的代码。我将模板代码更改为:

{% 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> 
Run Code Online (Sandbox Code Playgroud)

我现在会羞愧地低下头,希望有一天这可以帮助别人。