假设我有这样的复杂类型:
class MyForm(wtforms.Form):
firstname = wtforms.TextAreaField()
lastname = wtforms.TextAreaField()
TextAreaField可以被强制为包含HTML的str
()。它有一个名为data
的属性,其中包含原始数据。它还有一个名为label
的属性,其中包含用于显示标签的HTML。这就是我想从这个复杂类型中提取的三个值。
创建一个只包含我想要的属性的新对象的方法可能是什么?
类似。。。。
f = MyForm()
... populate f ...
x = {}
for k, v in f:
x[k] = {'html1': str(v), 'data': v.data, 'html2': v.label}
我知道那都错了,救命!
稍后,我想能够说:
print x.firstname.data
print x.firstname.html1
print x.firstname.html2
写一个适配器类怎么样?
class TAFAdapter(object):
def __init__(self, taf):
self.taf = taf
@property
def data(self): return self.taf.data
@property
def html1(self): return str(self.taf)
@property
def html2(self): return self.taf.label
那么你所要做的就是:
class MyForm(...):
def __init__(self):
self.firstname = TAFAdapter(wtforms.TextAreaField())
...
根据您的需要,您可以让TAFAdapter直接实例化TextAreaField
,也可以将其通用化以用于其他表单字段。。。