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