[Zope] ZPT tal:define scoping with METAL

Chris Withers chrisw at nipltd.com
Fri Sep 5 16:00:14 EDT 2003


Ed Leafe wrote:
>     I'm guessing that the full page isn't being evaluated as it appears, 
> but rather each of the slots is evaluated separately. Is that correct? 
> If so, is there an alternative to having to define the "results" twice 
> (once for each slot)?

METAL substitution happens before an code is evalutated.
So, your div that defines the results is being substituted out.

Either move the define to "myTemplate", in your example, or do something like 
this in the myTemplate:

<html metal:define-macro="main">

<metal:x define-slot="results"
          tal:define="global results python:[]"/>
<metal:x define-slot="leftside"/>
<metal:x define-slot="rightside"/>
</html>

Then in your template:


<html metal:use-macro="myTemplate">
<body>

<!-- This is the very slow query -->
<metal:x fill-slot="results"
          tal:define="global results here/someQuery"/>

         <table metal:fill-slot="leftside">
             <tr tal:repeat="res results">
                 ...
             </tr>
         </table>

         <table metal:fill-slot="rightside">
             <tr tal:repeat="res results">
                 ...
             </tr>
         </table>

</body>
</html>

cheers,

Chris




More information about the Zope mailing list