[Zope-dev] More almost __call__ ;-)
Shane Hathaway
shane@digicool.com
Fri, 13 Oct 2000 09:32:39 -0400
Jim Fulton wrote:
>
> Chris Withers wrote:
> >
> > Toby Dickenson wrote:
> > > <http://www.zope.org/Members/htrd/howto/FunctionTemplate>
> > >
> > > you would use....
> > >
> > > def a_method(self,md):
> > > do_stuff_with(md['param1'],md['param2'])
> > > a_method = FunctionTemplate(a_method)
> >
> > That looks like it'll do the trick... I wonder if there's any way you
> > can role it up into a Product so that I don't need to have
> > FunctionTemplate.py in each folder of a product that needs to use it?
>
> Is it *really* the case that you often want to method to be called directly
> via the Web *and* and from DTML? This doesn't seem right to me.
As I understand it, that's not the issue. Chris wants to receive the
DTML namespace implicitly.
> In any case, if you *just* want to get your function to be
> called from DTML (and your class is an extension class), you can give
> it the isDocTemp attribute like so:
>
> class MyClass(.... include some extension class ...):
>
> some_methodisDocTemp=1
> def some_method(trueself, self, REQUEST, RESPONSE=None):
> ....
That's a good idea, I wish I'd thought of it. :-)
However, the new calling convention (__render_with_namespace__, or
something like that) might break "isDocTemp" code.
> Note that if you get called from the web, RESPONSE will
> not be none. This is a handy way to decide if you
> are called from the web or as a sub-template. Of course,
> someone could pass a non-None RESPONSE argument directly.
This convention is helpful but not at all documented, so products (ZWiki
is a good example) often break this convention.
Shane