[Zope-dev] External Method Missery
Chris Withers
chrisw@nipltd.com
Thu, 13 Jul 2000 10:46:54 +0100
Shane Hathaway wrote:
> Here's the logic: ExternalMethod sets up func_* attributes so it can
> masquerade as a function. The trick works well enough to convince
> ZPublisher's mapply() to pass in a "self" argument as the first
> argument when needed.
What 'self' does mapply pass? I always though it would be the object
being rendered (the one that would appear before PARENTS[0] in PARENTS
if such a thing were possible ;-) but it appears to in fact be
PARENTS[0].
...which seems silly
So, apparently I have to pass this() to my external method to find out
what object I'm working on, which is a shame :(
My code which prepares a list of object that are in the URL path (does
this mean the objects that have been traveresed?) now looks like:
def navTree(self,startlevel,this):
# strip off acquisition wrappers, reverse the list... yum yum ;-)
objects = map(lambda o : getattr(o, 'aq_base',
o),self.REQUEST.PARENTS[:-startlevel])
objects.reverse()
objects.append(getattr(this, 'aq_base', this))
...which doesn't give quite what I want
objects[-1] should be the object getting rendered, however, for folders
getting rendered where index_html is a DTML document, it is the
index_html document.
I guess what I'm asking is, from PARENTS and this(), is there any way I
can tell when I'm rendering folder/ as opposed to folder/index_html?
If I can't, then how should I do this?
cheers,
Chris