zmi:在添加产品列表中重复

时间:2013-02-04 14:01:09

标签: zope

我有一个带有几个班级的旧式产品。在课堂上,我已经定义了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中,在“添加产品”下拉列表中,这些元类型每次显示两次。

我试图跟踪此错误的来源:

  1. ObjectManager.py,filtered_meta_types
  2. ObjectManager.py,all_meta_types
  3. getattr(Products,'meta_types',())
  4. 现在我不知道下一步要去哪看:)

    这只是一个麻烦,它不会导致产品功能出现任何问题。也许我应该将它更新为新式的zope产品,但我很好奇这个错误来自哪里。

1 个答案:

答案 0 :(得分:1)

您需要从<five:registerPackage />文件中删除configure.zcml注册,因为旧版程序包正在使用Products.命名空间。

Products.命名空间一直是自动加载的; <{1}}函数是为该命名空间隐式加载的,因为它是一个官方名称空间。

然而,当Zope开始支持initialize(context)命名空间 之外的包时,明智地做出了明确的注册决定,而Products.被引入了如果你还需要它,可以使用旧的注册钩子。

但是,在您的情况下,这意味着您的<five:registerPackage />函数被调用了两次;曾经因为它是一个initialize()包,一次是因为你明确注册了它。