wtforms中的字段字典

2024-10-03 17:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否可以使用wtforms在表单中创建字段字典。在

原因是我有一个位置字典,我使用jinja将其呈现到一个表中。在使用wtforms之前,我可以轻松处理以下各项的输入:

{% for locKey, loc in locDict.iteritems() %}
<tr>
    <td>{{ loc['name'] }}</td>
    <td><input type="text" id="{{ locKey }}" name="locKey"></td>
</tr>
{% endfor %

然而,在转到wtforms时,我不知道如何整洁地完成这项工作。我试图在wtform中创建一个字段字典,但是它似乎没有被实例化,因为我在表单中呈现了<UnboundField(IntegerField ...)>。你可以从下面的例子中看出我的意思。在

^{pr2}$

我在这方面花了几个小时(包括阅读stackoverflow和wtforms文档),但收效甚微。我的希望是有人知道如何让听写式的每个元素都被实例化,因此,瞧!在

我能想到的其他解决方案:

  1. 似乎可以用FieldList做些什么。然而,即使有可能,我也不认为我可以用上面的方法来创建我的表,也就是循环遍历不同的位置。

  2. 使用python中的exec函数分别创建所有表单,例如exec("loc%s = IntegerField ....") % locKey。这是有效的,但我不能用jinja渲染它,因为我必须做这样的事情,但这不起作用:

    {% for locKey, loc in locDict.iteritems() %}
    <tr>
        <td>{{ loc['name'] }}</td>
        <td>{{ form.loc{{ locKey }} }}</td>
    </tr>
    {% endfor %}
    
  3. 采用2的方法,然后创建一个难看的手动脚本来创建html模板(即,使html模板显式地具有{{ form.loclocOne }}等。这是相当难看的,但目前为止我所能看到的唯一可行的解决方案。

注意:正如您在上面的示例中看到的,我需要在每个字段中看到不同的最大值。在


Tags: 实例namein表单for字典loctr