.is_folderish
属性在很多地方使用。例如,当setting an object as the default view或activating discussions on an object时。
我的第一个问题是如何检查对象是否具有该属性集。我尝试使用bin/instance debug
这样的东西:
>>> app.site.news.is_folderish
...
AttributeError: is_folderish
我想我无法以这种方式访问属性,因为app.site.news
是具有该属性的对象的包装器。
我的第二个问题是如何将该属性添加到新的Dexterity对象。我想我可以使用下面的代码来完成它(但是在我的第一个问题解决之前我无法测试它。)
from zope import schema
from plone.dexterity.content import Item
class IHorse(form.Schema):
...
class Horse(Item):
def __init__(self):
super(Horse, self).__init__(id)
is_folderish = False
但我不确定如何将这两个类联系起来。
答案 0 :(得分:2)
您无需在类型中添加is_folderish
;它是目录中的索引,Dexterity类型已经具有该索引的适当属性isPrincipiaFolderish
。
如果你做需要为内容类型添加属性,你可以使用事件订阅者或创建plone.dexterity.content.Item
的自定义子类:
subscribers可以收听IObjectCreatedEvent
事件:
from zope.app.container.interfaces import IObjectAddedEvent
@grok.subscribe(IYourDexterityType, IObjectCreatedEvent)
def add_foo_attribute(obj, event):
obj.foo = 'baz'
custom content classes需要在您的XML类型中注册:
from plone.dexterity.content import Item
class MyItem(Item):
"""A custom content class"""
...
然后在您的Dexterity FTI XML文件中添加klass
属性:
<property name="klass">my.package.myitem.MyItem</property>