利用dexterity behavior 製作共用表單

很多時候,在不同的表單裏會有相同意義的欄位,如果每次都重寫一遍,實在浪費;為了不重造輪子,這時候使用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找到該選項打勾,就能夠啟用自定義的欄位了

很方便吧!