[Zope] Calling dynamic zsql method from zpt?
J Cameron Cooper
jccooper at jcameroncooper.com
Fri Nov 28 18:54:06 EST 2003
Nick Bower wrote:
> What I need is something like this:
>> >
>> > <div tal:define="sqlRows
>> > nocall:here/ZSQLTerritoryList(parent_id=parent_id)">
>> > <select name="country_list">
>> > <option value="">ANY</option>
>> > <option tal:repeat="sqlRow sqlRows" ...
>> > etc...
>> >
>> > but obviously the first line of code doesn't work. How else are
>> > variables passed do zsql methods from page templates?
>
You must use a Python expression, and not a TALES expression. TALES is
path-like, and has no support for arguments.
>> What happens if you change the call to:
>> <div tal:define="sqlRows
>> python:here.ZSQLTerritoryList(parent_id=parent_id)">
>
> Thanks. But then why does zope go to the trouble of having a "nocall:"?
'nocall' is for getting a handle to a method. Sort of like::
def foo():
print "A"
bar = foo
bar()
The standard (calling) operation gets a method's results. It's the
difference bewteen parens and no parens.
> Would multiple operations on subsequent sqlRows variables not result
> in multiple queries in the above python implementation? If not, then
> I'm safe and it's exactly what I need :-)
You're safe. It binds the results, as per above. Using 'nocall' is very
rare. I've seen a legit use in the wild only a couple of times.
--jcc
More information about the Zope
mailing list