Glenn Rogers <zope-list@gacela.demon.co.uk> wrote:
Imagine I have a python extension, with zope id pyFetch
def Fetch (self, href): ...
I want to call this in a manner similar to:
<!--#let call_method="'pyFetch'"--> <!--#in sql-method-returns-href--> <!--#var "_[call_method]( href )"--> <!--#/in--> <!--#/let-->
But I get an error:
Error Type: TypeError Error Value: not enough arguments; expected 2, got 0
So it seems to evaluate and call the extension without adding the parameters. I guess I need something like lambda in python.
Can anyone help me please?
I don't know what you mean by "python extension" -- is this an ExternalMethod? A PythonMethod (it doesn't look like one)? A method of a class defined in a Python product (I don't see an instance anywhere)? I'll assume an ExternalMethod, because it looks most like your stuff. Assuming you have a folder, which contains/acquires an ExternalMethod, 'pyFetch', defined as taking two parameters, as above (I'm assuming from your description that you have the EM with a different ID than its underlying function -- that works, but for clarity I would generally avoid that). This folder contains/acquires some method, 'list_hrefs', which returns a list of objects which have an attribute, href. In a DTML method contained/acquired by that folder:: # I'm using a PythonMethod which returns a list of dicts, # so I am using the 'mapping' argument to get its key/values to # look like attributes. <ul> <dtml-in list_hrefs mapping> <li><dtml-var "this().pyFetch( href )"></li> </dtml-in> </ul> That works for me -- I get an unordered list of the results of calling pyFetch() on each href "attribute". -- ========================================================= Tres Seaver tseaver@palladion.com 713-523-6582 Palladion Software http://www.palladion.com