Andreas Kostyrka writes:
> I've got a product that inherits from Folder, and creates
> some magic "content" by overriding __bobo_traverse__.
> Now I've got the problem that I cannot access the "magic" items from
> within a DocumentTemplate like in <dtml-var special>.
> The interesting thing is, that I've overloaded __getattr__ and
> __getitem__, and it seems both are never called. (Actual code snippets
> at the end)
> So I'm wondering how DocumentTemplates (and say Page Templates) access
> the items and properties?
> code snippet:
> def __getattr__(self,k,*args):
> print "__getattr__(%r,%r)==%r" % (self,key,r)
This will not work as you expect!
"__getattr__" is only called, when the normal lookup
does not succeed.
"Folder.__getattr__" is inherited from "Persistent"
and will serve only very few attributes.
For all others, you will get an "AttributeError", before
you print anything.
Furthermore, "__getattr__" takes only one (non-self)
arguement. Your code above (with this strange "*args" code)
will pass two. You will get a "TypeError" before you print
> def has_key(self,key):
"Folder" implements the mapping interface only very partially.
It does not implement "has_key".
> def __getitem__(self,key):
> print "__getitem__(%r,%r)" % (self,key)
> return Folder.Folder.__getitem__(self,key)
> except KeyError:
> return self.__bobo_traverse__(self,None,key)
> except AttributeError:
> raise KeyError,key
"__getitem__" is only called, when you explicitely use "instance[key]".
Zope-Dev maillist - [EMAIL PROTECTED]
** No cross posts or HTML encoding! **
(Related lists -