利用dexterity behavior 製作共用表單
很多時候,在不同的表單裏會有相同意義的欄位,如果每次都重寫一遍,實在浪費
為了不重造輪子,這時候使用behavior就很適合了
在一個dexterity的package中,我們可以
../../bin/paster addcontent dexterity_behavior
依指示填寫相關資訊後,zopeskel就會幫我們在package目錄裏產生所需檔案py檔
我們只要在interface的class裏利用schema設計所需欄位,例如
class IAddress(form.Schema):
"""Marker/Form interface for Address behavior
"""
address = schema.TextLine(
title=_(u'Address'),
required=False,
)
py檔中,中間的一段
alsoProvides(ILikeIt, IFormFieldProvider)
def context_property(name):
def getter(self):
return getattr(self.context, name)
def setter(self, value):
setattr(self.context, name, value)
def deleter(self):
delattr(self.context, name)
return property(getter, setter, deleter)
是zopeskel幫開發者寫好的程式碼,功用就是幫你進行各屬性的get / set / delete,如果沒有特殊需求,這部份不用更改變動
最後,再將欄位寫到最後一個calss
class Address(object):
""" Factory to store data in attributes
"""
adapts(IDexterityContent)
#
def __init__(self, context):
self.context = context
#
address = context_property('address')
其實,也就只有寫一行程式碼啊,然後,就完成了
只要到dexterity的behavior找到該選項打勾,就能夠啟用自定義的欄位了
很方便吧!