[Zope] Newbie: Missing a Variable (TAL/METAL Question)

Dieter Maurer dieter at handshake.de
Sat Jul 29 08:40:24 EDT 2006


beno - wrote at 2006-7-28 15:43 -0700:
> ...
>  <tr tal:repeat="item batch">
>    <td tal:define="number repeat/item/number"
>            tal:content="number">1</td>
>    <td tal:content="item/title">title</td>
>    <td><tal:content metal:use-macro="here/?number/macros/author">author</tal:content></td>
> ...
> Traceback
> ...
> Line 22, Column 4
> Expression: standard:'here/?number/macros/author'
> ...
>KeyError: 'number' (Also, an error occurred while attempting to render the standard error message.)

The traceback tells you (kept part) that the "KeyError: 'number'" comes
from "here/?number/macros/author" and it is right:

   Unless you use "global", variables defined in TAL only live
   within the element (aka "tag") you have defined them in.

   In your special case, this is the "td" element.
   It it not defined in the following "td"s.

A common approach is to use artificial "block" elements to
carry the definitions for some elements in the loop body -- similar to

      <tr tal:repeat="...">
        <tal:block define="number ...">
	  <td tal:content="number" />
	  ...
	  <td><tal:content metal:use-macro="here/?number/..." /></td>
	  ...
	</tal:block>
      </tr>

Apparently, you already use "tal" prefixed tag names.
The "tal:block" is another standard use...


Another advice: carefully read the PageTemplate section in
the Zope Book (2.7 edition, on "plope.org").



-- 
Dieter


More information about the Zope mailing list