我正在阅读 http://pythonhosted.org/WTForms/ 但它没有定义过滤器函数的接口,如 Field() 构造函数的filters=关键字参数。 在其他地方,它说 .filter 属性是可调用列表。 那么调用顺序是怎样的呢?它是否接受一个参数并返回过滤后的值?如果参数无效,它是否应该引发一些异常?如果是,那么是什么异常?
基本上,
class MyForm(Form):
myfield = wtf.TextField('My field', filters=[lambda x: x])
filter
参数是可调用对象的序列(元组或列表),接受字段的输入值并返回转换后的值。您可以按顺序链接多个过滤器。
请注意,上面示例中显示的过滤器不执行任何操作:它返回原始输入值。
更新@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])