我有一个带有几个班级的旧式产品。在课堂上,我已经定义了meta_type,我也在__init__.py
中注册了它们,即:
def initialize(context):
context.registerClass(
ClassA.ClassA,
permission = "Add ClassA",
constructors = (ClassA.manage_addClassA,
ClassA.manage_addClassA),
icon = 'www/images/ClassA.gif'
)
这很好,直到我将Zope从2.9更新到2.13。现在在zmi中,在“添加产品”下拉列表中,这些元类型每次显示两次。
我试图跟踪此错误的来源:
现在我不知道下一步要去哪看:)
这只是一个麻烦,它不会导致产品功能出现任何问题。也许我应该将它更新为新式的zope产品,但我很好奇这个错误来自哪里。
答案 0 :(得分:1)
您需要从<five:registerPackage />
文件中删除configure.zcml
注册,因为旧版程序包正在使用Products.
命名空间。
Products.
命名空间一直是自动加载的; <{1}}函数是为该命名空间隐式加载的,因为它是一个官方名称空间。
然而,当Zope开始支持initialize(context)
命名空间 之外的包时,明智地做出了明确的注册决定,而Products.
被引入了如果你还需要它,可以使用旧的注册钩子。
但是,在您的情况下,这意味着您的<five:registerPackage />
函数被调用了两次;曾经因为它是一个initialize()
包,一次是因为你明确注册了它。