[Zope-dev] more __call__ ...

Chris Withers chrisw@nipltd.com
Wed, 27 Sep 2000 10:50:15 +0100


Jim Fulton wrote:
> > http://a.site/folder/object/myobject
> >
> > myobject contains <dtml-var standard_html_header>
> > standard_html_header contains <dtml-var mynavigator>
> 
> Is myobject a DTMLMethod? Some kind of container?

Sorry... a good example for myobject would be a DTML Document.

> I don't see how it can contain a var tag if it's not
> DTML.  If it is DTML, I don't see where mynavigator
> fits in.

It is DTML, containing the line <dtml-var standard_html_header>
standard_html_header is a DTML Method containing <dtml-var mynavigator>
mynavigator is an object of meta_type 'Navigator' and it's the __call__
method of the Navigator product that I'm having trouble writing :-S

> > > > So, if I give my product a class attribute of isDocTemp=1, what
> > > > signature should I give my product's __call__ method so it picks up the
> > > > DTML namespace?
> > >
> > >   def __call__(self, ignored, md): ...

This, of coruse, begs the question as to what 'ignored' is, but I
probably don't want to know ;-)

> No: self.nav_header(None, md)

ok..

> > In any case, what is self in __call__(self, ...) and what should it be
> > in nav_header(self, ...)?
> 
> Python method signatures always begin with an argument that is the instance
> to which they are bound.

Okay, so in the __call__ case, self will be the mynavigator object?

Anyway, the isDocTemp thing seems to be getting somewhere.

md is a TemplateDict, and that's a stack of InstanceDict's, right?
Now, from what I've seen from playing, the object I've been looking for
all along is the one whose InstanceDict is on the top of the md stack.

So, two questions:

1. How can I get the top most InstanceDict out of md? is _pop the only
way? If so, I would guess I do:

	x = md._pop(1)
	md._push(x)

   to get the InstanceDict without disturting the namespace stack?

2. How would I turn the InstanceDict, x, back into an object? From
reading pDocumentTemplate.py, I would guess:

	obj = x.self

   Is that right?

well, thanks for all the help, I _think_ the end is in sight now ;-)

cheers,

Chris

PS: Once I've got that object, can I still use aq_chain(obj,1) to get
the list of obj and its containing parents? (In essence, the PARENTS'y
type thing I've been looking for all along ;-)