I am trying to setup dynamic compilation of Cheetah templates, useful for development (so I don't have to recompile them with cheetah compile
after each change). Seems like Cheetah.Template.Template
is right API for that, but it simply doesn't handle parent templates.
So if I have:
-- __init__.py
-- index.tmpl:
#extends layout.A
-- layout/
-- __init__.py
-- A.tmpl:
#echo 'Hello!'
If I run Python in root directory, I'd get the next:
>>> from Cheetah.Template import Template; t = Template(file='index.tmpl')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.6/site-packages/Cheetah-2.4.3-py2.6-freebsd-7-amd64.egg/Cheetah/Template.py", line 1259, in __init__
self._compile(source, file, compilerSettings=compilerSettings)
...
ImportError: No module named A
If I compile A.tmpl
with cheetah compile
, error disappears, but changes in template doesn't affect result of index.tmpl
compilation:
$ cat layout/A.tmpl
#echo 'Hello, world!'
$ python
>>> from Cheetah.Template import Template; t = Template(file='index.tmpl')
>>> str(t)
'Hello!'
Should I recompile all parent templates by myself (e.g. like Aquarium
framework does)?
Cheetah version 2.4.
Any tips about Django1.3\Cheetah integration are also appreciated.
Some where early in your process startup, include the following two lines:
import Cheetah.ImportHooks
Cheetah.ImportHooks.install()
I believe this will give you the behavior you are looking for.
This is not documented in the main docs, but Tavis Rudd suggested this in response to a similar question on the Cheetah mailing list.