6

在创建敏捷内容类型后,我正在尝试执行一些任意代码。例如,内容类型可以代表一匹马。

import logging
logger = logging.getLogger("Plone")

class IHorse(form.Schema):

    def __init__(self, context):
        logger.info('Creating horse')
        super(self).init(self, context)

在前台运行应用程序时,我想在控制台中打印记录器消息“Creating horse”。但是这匹马是被创造出来的,我没有收到它的消息。我猜内容类型对象是由创建的__init__,但也许我错了。

4

1 回答 1

7

您已连接到内容类型__init__架构。模式用作填充内容的字段的基础,但它不是内容类型类本身。

如果你想挂钩内容类型的创建,你可以注册事件订阅者

from zope.app.container.interfaces import IObjectAddedEvent

@grok.subscribe(IHorse, IObjectAddedEvent)
def logHorseCreated(horse, event):
    logger.info('Created a horse')

如果您确实必须在方法中自定义内容项初始化,__init__则必须创建自己的自定义内容类

from plone.dexterity.content import Item

class Horse(Item):
    def __init__(self, id=None):
        super(Horse, self).__init__(id)
于 2013-02-26T20:58:33.487 回答