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