[Zope] Zope thinks the object still exists...

Nico de Boer nico@nfg.nl
10 Jun 2002 15:25:01 +0200

Hi all,

I've got some problems with my News product. For the rendering of it,
I let the site owner choose between DTML Methods and Zope Page
Templates. In the Add Form he can check a checkbox 'Add DTML Methods'
or a checkbox 'Add Page Templates' (or both).

In the __init__ method of my product this works as follows:

    def __init__(self, id, title='', zpt_add='', dtml_add=''):
        """Initialization News Product"""
        self.id = id
        self.title = title
        if dtml_add == 'yes': ## checkbox 'Add DTML Methods' checked
        if zpt_add == 'yes':  ## checkbox 'Add Page Template' checked

One of the methods looks like this:

    def zptadd(self):
        """Check whether to add a Zope Page Template"""
        self.createZPT(self, 'News_template', '', self.init_News_template())

Which calls createZPT:

    security.declareProtected('Change News','_createZPT')
    def createZPT(self, parent, id, title, content):
        """Add a PageTemplate to the News product"""
        parent._setObject(id, ZopePageTemplate.ZopePageTemplate(id, text=content))

This works all fine. But afterwards, when the site owner has (by
accident) deleted the News_template, I want to give him the
opportunity to add it again.

I have tried it like this:

    meta_types = (
        {'name': 'News Page Template', 'action': 'manage_addProduct/News/zptadd'},

This doesn't work, I get the following error:

Traceback (innermost last):
  File /usr/lib/zope/lib/python/ZPublisher/Publish.py, line 150, in publish_module
  File /usr/lib/zope/lib/python/ZPublisher/Publish.py, line 114, in publish
  File /usr/lib/zope/lib/python/Zope/__init__.py, line 158, in zpublisher_exception_hook
  File /usr/lib/zope/lib/python/ZPublisher/Publish.py, line 98, in publish
  File /usr/lib/zope/lib/python/ZPublisher/mapply.py, line 88, in mapply
    (Object: zptadd)
  File /usr/lib/zope/lib/python/ZPublisher/Publish.py, line 39, in call_object
    (Object: zptadd)
  File /var/lib/zope/Products/News/News.py, line 218, in zptadd
    (Object: test)
  File /var/lib/zope/Products/News/News.py, line 225, in createZPT
    (Object: test)
  File /usr/lib/zope/lib/python/OFS/ObjectManager.py, line 219, in _setObject
    (Object: test)
  File /usr/lib/zope/lib/python/OFS/ObjectManager.py, line 72, in checkValidId
    (Object: test)
Bad Request: The id "News_template" is invalid--it is already in use.

Zope thinks that News_template already exists, but it doesn't.

Can somebody help me?

Greetz Nico