我似乎无法弄清楚如何在模板中渲染WTForms CheckboxInput
。当我尝试使用我的Jinja模板中的Flask渲染字段时,我收到此错误:
TypeError:调用()只需要2个参数(给定1个)
该错误与我的模板中{{ form.prefs(value='n') }}
的使用方式有关。 CheckBoxInput
的WTForms文档说“默认情况下,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 %}
答案 0 :(得分:7)
您实际上应该使用BooleanField
而不是直接使用小部件:
class PreferencesForm(Form):
prefs = BooleanField()
然后在你的模板中:
{{ form.prefs(value='n') }}
一般的想法是在表单类中使用fields之一,它会自动分配适当的小部件进行显示。 widgets are:
... 的目的是将字段呈现给其可用的表示形式,通常是XHTML。调用字段时,默认行为是将呈现委托给其窗口小部件。提供此抽象以便可以轻松创建窗口小部件以自定义现有字段的呈现。
强调我的
此外,小部件本身需要field instance to render:
def __call__(self, field, **kwargs):
if getattr(field, 'checked', field.data):
kwargs['checked'] = True
return super(CheckboxInput, self).__call__(field, **kwargs)
答案 1 :(得分:0)
使用checked 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 %}