[Zope] alternating colors based on sequence-index of outer loop

hans hans@beehive.de
Mon, 25 Mar 2002 16:01:24 +0000


John Hunter wrote:

> >>>>> "hans" == hans  <hans@beehive.de> writes:
>
>     hans> There is a prefix attribute to dtml-in, which allows you to
>     hans> name the different sequence iterators.For details see
>     hans> http://www.zope.org/Members/michel/ZB/AppendixA.dtml cheers
>
> Thanks, that is exactly what I am looking for.  I am, however, having
> trouble using the sequence-var-variable syntax with prefixes from the
> outer loop.  Eg, section_var_id gives a key error in the example
> below
>
>       <dtml-in expr="Sections.objectValues('Section')"
>                prefix="section">
>
>          <dtml-in expr="_['section_item'].objectValues('Student')"
>                   prefix="student" sort="last_name">
>             <tr>
>              <dtml-if student_start>
>                 <th rowspan=<dtml-var student_length>><dtml-var section_var_id></th>
>              </dtml-if>
>
>                 ...[snip]...
>            </tr>
>          </dtml-in>
>       </dtml-in>
>
> although I can still access that value with
> <dtml-var expr="_['section_item'].id">
>
> Am I missing the syntax, or is there a problem using prefixes with the
> sequence-var-variable syntax?

yes.
there is no variable named "var_id" :-)
there is an attribute "id" to zope objects, usually accessed by object.id
(although the (newer) getId() method is recommended).
the object whose id you want is named "section_item".
inside a dtml-in, on each iteration this (and all the iteration infos)
are automagically pushed (and poped) onto the namespace "_",
so there is no need to "_['section_item']", section_item alone will do.
how about <dtml-var expr="section_item.id"> ?
-------------------------------------------------------------
Who's got only a hammer sees the world as a nail
hans augustin  (software developer)           hans@beehive.de
beehive elektronische medien GmbH       http://www.beehive.de
phone: +49 30 847-82 0                  fax: +49 30 847-82 299