如何在wtforms Flask中覆盖名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (113)

new.html

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

我尝试了上面的代码在我的输入字段中指定一个名称,但是我得到了一个下面的错误。但是,如果我添加了一个类或id替换名称(例如:{{ form.particular(id='particulars') }}),它可以工作,但不输出名称,只输出以下错误:

builtins.TypeError

TypeError: html_params() got multiple values for keyword argument 'name'

提问于
用户回答回答于

定义表单时:

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

然后你就有了一个name=particular,这是wtform的基本功能。所以当你试图使用form.particular(name='particular[]'),它会产生多个值错误,因为你不能在Jinja 2模板中重新定义名称。

你可以用两种方式之一覆盖名称(注意,在Jinja 2呈现之前,两者都是服务器端):

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
用户回答回答于

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

扫码关注云+社区

领取腾讯云代金券