$ is a ``smart variable prefix''. When Cheetah sees
determines both the variable's position and whether it's a searchList value or
a non-searchList value, and generates the appropriate Python code.
In top-level position, the
$ is required. Otherwise there's
nothing to distinguish the variable from ordinary text, and the variable name
is output verbatim.
In expression position, the
$ is required if the value comes from
the searchList or a ``#set global'' variable, recommended for
local/global/builtin variables, and not necessary for the special
False. This works because
Cheetah generates a function call for a searchList placeholder, but a bare
variable name for a local/global/builtin variable.
In LVALUE position, the
$ is recommended. Cheetah knows where
an LVALUE is expected, so it can handle your variable name whether it has
$ or not.
EXCEPTION: Do not use the
$ prefix for intermediate variables in
a Python list comprehensions. This is a limitation of Cheetah's parser; it
can't tell which variables in a list comprehension are the intermediate
variables, so you have to help it. For example:
#set $theRange = [x ** 2 for x in $range(10)]
$theRangeis a regular
$rangeis a Python built-in function. But
xis a scratch variable internal to the list comprehension: if you type
$x, Cheetah will miscompile it.