1

私はZope2プログラミングの世界の初心者です。ですから、私が何か明白なことを求めているのなら、我慢してください。

サンプル商品を作成しました。ZMIではすべて問題ありません。製品を簡単に追加/削除したり、属性を変更したりできます。ただし、コードで製品を追加したり、Zopeデバッグモードを使用したりすることはできません。私はOFS.Folderコード(参照として)を何度も読んで、役に立たない違いを見つけました。

誰かが私にヒント/手がかりを与えることができれば本当にありがたいです。TIA、

製品コード:

##
## 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コード:

##
## bahman.devistan.__init__.py
##
from bahmanm.devistan.implementation import Devistan


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

サンプルページから呼び出すときのスタックトレースmanage_addDevistan

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のデバッグモードでの出力:

>>> app.manage_addProduct['Devistan'].manage_addDevistan
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: manage_addDevistan

buildout.cfg:

[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
4

1 に答える 1

2

manage_addDevistan製品を追加するには、関数を直接インポートします。

from bahmanm.devistan.implementation import manage_addDevistan

manage_addDevistan(somefolder, 'someid')
于 2013-01-07T19:07:40.523 に答える