首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Zope 2:在自己的产品中使用manage_addProduct (AttributeError)

Zope 2:在自己的产品中使用manage_addProduct (AttributeError)
EN

Stack Overflow用户
提问于 2013-01-07 20:38:46
回答 1查看 330关注 0票数 1

我是Zope2编程领域的新手。所以,如果我问的是明显的问题,请耐心等待。

我创建了一个示例产品。在ZMI中一切都很好:我可以轻松地添加/删除产品并更改其属性。但是,我不能在代码中或使用Zope调试模式添加产品。我一遍又一遍地阅读OFS.Folder代码(作为参考),找出任何不同之处都无济于事。

如果有人能给我一点提示,我将不胜感激。蒂娅

产品代码:

代码语言:javascript
复制
##
## bahmanm.devistan.implementation.Devistan
##
from bahmanm.devistan.interfaces import IDevistan
from zope.interface import implements
from OFS.Folder import Folder
from Products.PageTemplates.PageTemplateFile import PageTemplateFile
from Acquisition import Implicit
from Globals import Persistent, InitializeClass
from AccessControl.Role import RoleManager
from OFS.ObjectManager import ObjectManager
from OFS.PropertyManager import PropertyManager
from OFS.FindSupport import FindSupport


class Devistan(Implicit, Persistent, RoleManager, Folder):
    """Devistan product implementation.
    """
    implements(IDevistan)
    meta_type = 'Devistan Site'
    _properties = ({'id': 'title', 'type': 'string', 'mode': 'wd'},)
    manage_options = (
        ObjectManager.manage_options +
        ({'label': 'View', 'action': ''}, ) +
        PropertyManager.manage_options +
        RoleManager.manage_options +
        Folder.manage_options +
        FindSupport.manage_options
        )
    index_html = PageTemplateFile(
        '../template/devistan/index.pt', globals())

    def __init__(self, id=None):
        if id is not None:
            self.id = str(id)

InitializeClass(Devistan)


manage_addDevistanForm = PageTemplateFile(
    '../template/devistan/manage_addDevistanForm.pt', globals())


def manage_addDevistan(self, id, title='', REQUEST=None):
    """Adds a new Devistan instance.
    """
    obj = Devistan(id)
    obj.title = title
    self._setObject(id, obj)
    if REQUEST is not None:
        return self.manage_main(self, REQUEST, update_menu=1)
    return "<p>Devistan instance successfully installed: <tt>%s</tt>" % id


def initialize(self):
    self.registerClass(
        Devistan,
        constructors=(manage_addDevistanForm,
                      manage_addDevistan))

__init__.py代码:

代码语言:javascript
复制
##
## bahman.devistan.__init__.py
##
from bahmanm.devistan.implementation import Devistan


def initialize(self):
    """Registers Devistan product.
    """
    Devistan.initialize(self)

从示例页面调用manage_addDevistan时的堆栈跟踪:

代码语言:javascript
复制
2013-01-07 15:43:11 ERROR Zope.SiteErrorLog 1357560791.840.323411816939 http://localhost:8080/devistan/addSampleSite
Traceback (innermost last):
  Module ZPublisher.Publish, line 126, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 46, in call_object
  Module bahmanm.devistan.implementation.Devistan, line 37, in addSampleSite

Zope调试模式下的输出:

代码语言:javascript
复制
>>> app.manage_addProduct['Devistan'].manage_addDevistan
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: manage_addDevistan

buildout.cfg:

代码语言:javascript
复制
[buildout]
parts = zope2
        instance
extends = http://download.zope.org/Zope2/index/2.13.19/versions.cfg
develop = /home/bahman/Work/devistan/bahmanm.devistan

[zope2]
recipe = zc.recipe.egg
eggs = Zope2
       bahmanm.devistan
interpreter = zopepy
debug-mode = on

[instance]
debug-mode = on
recipe = plone.recipe.zope2instance
user = admin:admin
http-address = 8080
eggs = ${zope2:eggs}
zcml = bahmanm.devistan
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-08 03:07:41

要添加您的产品,只需直接导入manage_addDevistan函数:

代码语言:javascript
复制
from bahmanm.devistan.implementation import manage_addDevistan

manage_addDevistan(somefolder, 'someid')
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14196149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档