From: Chris Withers <[EMAIL PROTECTED]>
> Pierre-Julien Grizel wrote:
> > It seems that in fact the DTML document doesn't actually pass _.None and
> > _ to my object. WHY ??????
>
> This is deep voodoo that I don't fully understand. To me, it appears
> that what you get depends on how your __call__ was called...
>
> The arguments vary dependign on whether:
> -you were called from a bit of DTML
> -traversed directly through a URL
> -called from soem python you wrote
Here's the scoop:
1. DTML Methods' __call__ signature is (client=None, REQUEST={}, RESPONSE=None, **kw).
The client,
REQUEST, and keyword arguments are layered to form the namespace for the Method, with
the keywords
on top, then the client, then REQUEST.
2. If you call a DTML Method in a Python expression, its namespace will be empty
unless you
explicitly pass a client, REQUEST, and/or keyword arguments.
3. URL traversal automatically tries to look up parameter names in the REQUEST. Both
REQUEST and
RESPONSE are found in REQUEST, so they are passed to the Method.
4. When an object is named in the name attribute of a DTML tag, the DTML code checks
to see whether
the object is callable and has a true attribute called "isDocTemp". If so, it passes
the namespace
to the REQUEST parameter. Otherwise, if the object is callable it calls it with no
arguments.
Thus, to simulate <dtml-var foo> in Python code, including DTML expressions, you must
either use
"obj(_.None, _)" or "obj(REQUEST=_)".
Cheers,
Evan @ digicool & 4-am
_______________________________________________
Zope maillist - [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope
** No cross posts or HTML encoding! **
(Related lists -
http://lists.zope.org/mailman/listinfo/zope-announce
http://lists.zope.org/mailman/listinfo/zope-dev )