On Friday 02 March 2007 17:06, Tres Seaver wrote:
Gaute Amundsen wrote:
On Friday 02 March 2007 11:20, Andreas Jung wrote:
--On 2. März 2007 11:10:57 +0100 Gaute Amundsen <gaute@div.org> wrote:
I have tried many varieties, but I can't remember ever getting it to work...
<snip> foo = restrictedTraverse('/foo/bar/index.html/macros/mymacro') return foo()
But of course foo is a list, and I can't see a way I can use any of the contents..
You can't "use it", only inline it into a calling template. E.g.:
##Script (Python) "random_macro" from random import choice # may need module security assertion macros = context.some_template.macros macro1 = macros['one'] macro2 = macros['two'] macro3 = macros['three'] return choice((macro1, macro2, macro3))
The template would just do:
<div metal:use-macro="context/random_macro" />
Tres.
I see.. So it is the use-macro statement that takes the datastructure, and turns it into a tempate/html. I my case I think I will rather try to use a wrapper approach. In script: return container.ajax_tpl(mcr=my_macro_from_big_tpl) In ajax_tpl: <div metal:use-macro="options/mcr" /> But it's good to know the other option allso. Thanks. On Friday 02 March 2007 22:36, David H wrote:
With Zope 2 I use python scripts to fill my "content" area (2-3 column css) with macros like so: # python script: return container.Budget.BudgetMaint.macros['budgetMaint']
It works
All best,
David H
In other words, a script can return a macro, but is has to be into a use-macro tag. OK Thanks.