3

我似乎无法弄清楚如何CheckboxInput在我的模板中呈现 WTForms。当我尝试在我的 Jinja 模板中使用 Flask 渲染该字段时,我收到此错误:

TypeError: call () 需要 2 个参数(1 个给定)

该错误与{{ form.prefs(value='n') }}我的模板中的使用方式有关。WTForms 文档CheckBoxInput说“默认情况下 value= HTML 属性是 'y' ,除非 value= 在渲染时另行指定。” 无论我是否指定一个值,我都会收到错误消息。

我似乎找不到如何呈现简单 CheckBoxInput 的示例。任何帮助表示赞赏。

这是我的表格:

class PreferencesForm(Form):
    prefs = widgets.CheckboxInput()

这是我的模板:

{% extends "base.html" %}

{% block content %}

<form method="POST" action="/user/prefs/">
    <div>{{ form.prefs(value='n') }}</div>
    <button type="submit" class="btn">Submit</button>    
</form>

{% endblock %}
4

2 回答 2

10

您实际上应该使用 aBooleanField而不是直接使用小部件:

class PreferencesForm(Form):
    prefs = BooleanField()

然后在您的模板中:

{{ form.prefs(value='n') }}

一般的想法是使用表单类中的一个字段,它将自动分配适当的小部件进行显示。小部件是

...旨在将字段呈现为其可用表示的类,通常是 XHTML。当一个字段被调用时,默认行为是将渲染委托给它的小部件。提供此抽象以便可以轻松创建小部件以自定义现有字段的呈现。

强调我的

此外,小部件需要一个字段实例来呈现自身:

def __call__(self, field, **kwargs):
    if getattr(field, 'checked', field.data):
        kwargs['checked'] = True
    return super(CheckboxInput, self).__call__(field, **kwargs)
于 2013-05-14T21:05:22.737 回答
1

使用检查的 att

{% if r.renovacion == 's' %}
        <td>{{  forma.renovacion(id = "" + r.id|string  + "", value = 's', checked = True) }}</td>
        {% else %}
        <td>{{  forma.renovacion(id = "" + r.id|string  + "", value = 'n', checked = False) }}</td>
        {% endif %}
于 2015-05-23T13:45:51.477 回答