Oliver Sturm writes:
....
<dtml-if "(_.has_key('foo') and foo) or (_.has_key('bar') and bar)">
versus <dtml-if "(_.has_key('foo')) or (_.has_key('bar'))"> ... difference?
In the first case, you test both existence and value, in the second case only existence. In general: <dtml-if XXX> is equivalent to <dtml-if "_.has_key('XXX') and XXX"> More details: <http://www.dieter.handshake.de/pyprojects/zope/book/chap3.html>
- How exactly is the expression "foo" defined? The expression "foo" is defined as "foo"....
But, when you use it with "dtml-if" or in another boolean context, then it is checked whether it has a Python true value. Everything, that is not a Python false value, is a Python true value. Python false values are e.g. the integer 0, the empty string, an empty sequence, and object "o" with "len(o) == 0", an object "o" with "o.__non_zero__() = 0". More details: Python language reference.... Dieter