[Zope] Continued problem tal:condition

Dieter Maurer dieter@handshake.de
Thu, 22 Aug 2002 22:25:53 +0200


KevinL writes:
 > On Thu, 2002-08-22 at 04:30, Dieter Maurer wrote:
 > > zope writes:
 > >  > ...
 > >  > Now all my macros are in the same page.
 > >  > I m am trying to use :
 > >  >   <div tal:condition="request/form/lkid | nothing">
 > >  >      <tal:block define="mName
 > >  > python:here.oms.Users.lib.pset_links(lkid=request.form['lkid'])">
 > >  >          <metal:block use-macro="container/zptmac_memall/macros/?mName">
 > >  >           List
 > >  >          </metal:block>
 > > This does not work, because TAL-attributes are only evaluated once
 > > all METAL-attributes have been executed.
 > > 
 > >   As a consequence you must not refer to a TAL defined variable
 > >   in a METAL attribute.
 > > 
 > > Use a Python script to return the macro object you need.
 > > 
 > > 
 > > Furthermore, you cannot suppress a METAL attribute execution
 > > with a "tal:condition" (for the same reasons).
 > > 
 > >   Use an (almost) empty macro in such a case (it may need to
 > >   define slots, when you call it with "metal:fill-slot").
 > 
 > Um.  That's wrong, I believe.
It's explicitely stated in the documentation.

And, think a moment:

  Many tal attributes reference things available only under
  special circumstances, e.g. form variables.
  When you evaluate them in a different context, you will get
  exceptions.

  Then, think of macro expansion. When macro expansion is
  enabled, you expand macros outside when you look at the
  template source, outside of any special context. You cannot
  rely on tal attributes for that.

  Of course, it would be possible to not look at tal attributes
  when macro expansion is enable but look at them when it is
  disabled. But that would be a really strange design....


Dieter