Some time ago after reading a post on Eric Florenzano's blog about hacking together support for Cheetah with Django, I decided to add "proper" support for Cheetah/Django to Cheetah v2.2.1 (released June 1st, 2009). At the time I didn't use Django for anything, so I didn't really think about it too much more.
Now that I work at Apture, which uses Django as part of its stack, Cheetah and Django playing nicely together is more attractive to me and as such I wanted to jot down a quick example project for others to use for getting started with Cheetah and Django. You can find the django_cheetah_example project on GitHub, but the gist of how this works is as follows.
For all intents and purposes, using Cheetah in place of Django's templating system is a trivial change in how you write your views.
After following the Django getting started
documentation, you'll want to create a directory for your Cheetah templates, such
as Cheetar/templates. Be sure to touch __init__.py in your template
directory to ensure that templates can be imported if they need to.
Add your new template directory to the TEMPLATE_DIRS attribute
in your project's settings.py.
Once that is all set up, utilizing Cheetah templates in Django is just
a matter of a few lines in your view code:
import Cheetah.Django
def index(req):
return Cheetah.Django.render('index.tmpl', greet=False)</code>
Note: Any keyword-arguments you pass into the Cheetah.Django.render()
function will be exposed in the template's "searchList", meaning you can
then access them with $-placeholders. (i.e. $greet)
With the current release of Cheetah (v2.4.1), there isn't support for using pre-compiled Cheetah templates with Django (it'd be trivial to put together though) which means Cheetah.Django.render() uses Cheetah's dynamic compilation mode which can add a bit of overhead since templates are compiled at runtime (your mileage may vary).