Cheetah with Cherrypy: how to load base templates, and do so automatically on change during developm

Posted by Heikki Toivonen on Stack Overflow See other posts from Stack Overflow or by Heikki Toivonen
Published on 2010-03-31T04:34:07Z Indexed on 2010/03/31 5:43 UTC
Read the original article Hit count: 664

I am working on a cherrypy+cheetah app and would like to improve the development experience.

I have everything working when I manually compile templates beforehand. However, during development I'd rather just load the templates every time they are referenced so that I don't need to kill and restart my application. I have a couple of issues I am facing:

  1. If I have templates inheriting from base templates, I get import errors (can't find base templates). I think I had this actually working during my experiments, but unfortunately didn't save it and now I can't make it work.
  2. Suppose I get 1. working, how do make it so that edits even in base templates get picked up without restart.

Below is my sample application that should demonstrate the problems. The directory structure is as follows:

t.py
templates/
    base.tmpl
    index.tmpl

t.py:

import sys

import cherrypy
from Cheetah.Template import Template

class T:
    def __init__(self, foo):
        self.foo = foo

    @cherrypy.expose
    def index(self):
        return Template(file='templates/index.tmpl',
                        searchList=[{'foo': self.foo}]).respond()

cherrypy.quickstart(T(sys.argv[1]))

base.tmpl:

#def body
This is the body from the base
#end def

This is the base doc

index.tmpl:

#from templates.base import base
#extends base
#def body
$base.body(self)
This is the extended body
#end def

This is from index

Run it like this:

python t.py Something

© Stack Overflow or respective owner

Related posts about python

Related posts about cheetah