[Zope] Stupid Question Time

R. David Murray bitz@bitdance.com
Tue, 11 Jul 2000 19:21:27 -0400 (EDT)


On Tue, 11 Jul 2000, Jerome ALET wrote:
> ' and " are equivalent

Not quite true.  dtml only recognizes " for surrounding dtml expressions.
But you are right that they are equivalent in python.

> () are for functions or methods

To call functions or methods: blah(somearg).  But also used for
grouping in expressions: a * (b+c), and for delimiting immutable sequences:
('thing', 'secondthing').

> [] are for arrays (aka list, aka tables) or dictionnaries (aka mappings)

[] can be used to index into sequences: a[3], or to slice out a
portion of a sequence: a[2:4] (see the python guide for more).
Also key lookup out of dictionaries/mappings.  But to *define*
dictionaries you use {}:  {'key1': 'val1', 'key2': 'val2'}.

The most confusing part is the interface between dtml and python.
in an expr, inside the quotes you are in python and things follow
python syntax rules.  This gets really confusing when you have
dtml variables that have hyphens in them, since in python that's
the subtraction symbol.  So inside a python expression, you have
to look up such symbols in the dtml name space.  The dtlm namespace
is named '_', and is a mapping.  So you have things like:

<dtml-var expr="_['sequence-index']+1">

which prints out a number one greater than the current sequence-index.

You can leave off the 'expr=' above, and because of the "s, dtml
will assume it.  This is the way most dtml is written, with the
expr= or name= left out, and that can be very confusing when you
don't know the rules; see the dtml guide.

This is but the briefest introduction to this topic, but hopefully
it will make a few things clearer.

--RDM