过滤器在 wtforms 中如何工作?

问题描述 投票:0回答:2

我正在阅读 http://pythonhosted.org/WTForms/ 但它没有定义过滤器函数的接口,如 Field() 构造函数的filters=关键字参数。 在其他地方,它说 .filter 属性是可调用列表。 那么调用顺序是怎样的呢?它是否接受一个参数并返回过滤后的值?如果参数无效,它是否应该引发一些异常?如果是,那么是什么异常?

wtforms
2个回答
6
投票

基本上,

class MyForm(Form):
    myfield = wtf.TextField('My field', filters=[lambda x: x])

filter
参数是可调用对象的序列(元组或列表),接受字段的输入值并返回转换后的值。您可以按顺序链接多个过滤器。

请注意,上面示例中显示的过滤器不执行任何操作:它返回原始输入值。


0
投票

更新@Damien的答案,因为我们在从 wtforms==2.3.3 转换为 wtforms==3.1.2 时遇到了问题(由于迁移到 Python 3.12),因此

class MyForm(Form):
    myfield = wtf.TextField('My field', filters=[lambda x: x.strip()])

尝试使用

Internal Server Error
显示空表单会默默失败。调查 WTF 中的失败表明它试图将
None
值传递给 lambda 函数。这解决了这个问题:

class MyForm(Form):
    myfield = wtf.TextField('My field', filters=[lambda x: x.strip() if x else x])
© www.soinside.com 2019 - 2024. All rights reserved.