##
4.2 Static placeholder

The template:

      Cached variable:  $*voom

The command line and output:

      % voom='Voom!' python x.py --env
      Cached variable:  Voom!

The generated code, with line numbers:

       1  write('Cached variable:  ')
       2  ## START CACHE REGION: at line, col (1, 19) in the source.
       3  RECACHE = True
       4  if not self._cacheData.has_key('19760169'):
       5      pass
       6  else:
       7      RECACHE = False
       8  if RECACHE:
       9      orig_trans = trans
      10      trans = cacheCollector = DummyTransaction()
      11      write = cacheCollector.response().write
      12      write(filter(VFS(SL,"voom",1))) # generated from '$*voom' at line 1,
                  # col 19.
      13      trans = orig_trans
      14      write = trans.response().write
      15      self._cacheData['19760169'] = cacheCollector.response().getvalue()
      16      del cacheCollector
      17  write(self._cacheData['19760169'])
      18  ## END CACHE REGION

      19  write('\n')

That one little star generated a whole lotta code. First, instead of an ordinary `VFS` lookup (searchList) lookup, it converted the placeholder to a lookup in the `._cacheData` dictionary. Cheetah also generated a unique key (`'19760169'`) for our cached item - this is its cache ID.

Second, Cheetah put a pair of if-blocks before the `write`. The first (lines 3-7) determine whether the cache value is missing or out of date, and sets local variable `RECHARGE` true or false. This stanza may look unnecessarily verbose - lines 3-7 could be eliminated if line 8 was changed to

      if not self._cacheData.has_key('19760169'):

- but this model is expandable for some of the cache features we'll see below.

The second if-block, lines 8-16, do the cache updating if necessary. Clearly, the programmer is trying to stick as close to normal (dynamic) workflow as possible. Remember that `write`, even though it looks like a local function, is actually a method of a file-like object. So we create a temporary file-like object to divert the `write` object into, then read the result and stuff it into the cache.