如何在wtforms Flask中覆盖名称

时间:2018-07-31 18:27:33

标签: python flask flask-wtforms

new.html

{{ form.particular(name='particular[]') }}

我尝试了上面的代码在输入字段中分配名称,但出现以下错误。但是如果我添加一个类或ID替换名称 (例如:{{form.particular(id ='particulars')}})可以,但不适用于名称,只会输出以下错误:

builtins.TypeError
TypeError:html_params()为关键字参数“名称”获得了多个值

任何解决方案。预先谢谢你:)

2 个答案:

答案 0 :(得分:0)

如果它正在通过渲染模板发送表单数据,则只需将变量名放在{{var_name}}之间的模板中,并在代码中在返回渲染模板函数中使用此var_name。

答案 1 :(得分:0)

定义表单时:

class WebForm(FlaskForm):
    particular = StringField('some_description')

则您将拥有一个字段,其字段name=particular是wtforms的基础功能。因此,当您尝试执行form.particular(name='particular[]')时,由于无法在jinja2模板中重新定义名称,因此会出现多值错误。

您可以通过以下两种方式之一覆盖名称(请注意,两种名称都是在jinja2渲染发生之前的服务器端):

1)静态:即定义一个新名称:

class WebForm(FlaskForm):
    particular_new = StringField('some_description')

2)动态:即包装函数会创建修改后的静态表单:

def WebForm(new_name):
    class TempForm(FlaskForm):
        pass
    setattr(TempForm, new_name, StringField('some_description'))
    return TempForm()
# will create a WebForm with attribute name of 'new_name' as StringField