Using the Python Cheetah Template compiler

The web application I’m working on uses Cheetah – “The Python Powered Template Engine” for web page generation and while the updated documentation is a great improvement over the old docs there remain some gaps that weren’t very clear to me when I first got started…


Of course, Cheetah’s got a lot of features so I’m certain there are things I’m missing which is part of the point of this post to start a conversation about how I’m using Cheetah and elicit feedback and exchange ideas/best practices.

The first piece I’ll toss out is simply a routine to call the Cheetah compiler on a list of templates. Running this routine alone on the CI server has caught a bunch of syntax errors that wouldn’t have been caught using runtime compiled templates.

def compileTemplates(templateFiles, outpath="ui/compiled/"):
    ''' Compiles templateFiles if they're out of date '''
    if templateFiles == []:
        raise Exception("No template files specified")

    for t in templateFiles:
        outfile = os.path.split(t)[1]
        outfile = os.path.splitext(outfile)[0] + ".py"
        if not os.path.exists(outpath + outfile) or os.path.exists(outpath + outfile) and os.path.getmtime(outpath + outfile) < os.path.getmtime(config.templatePath(t)):
            t = config.templatePath(t)
            print "Template: " + t
            source = Cheetah.Compiler.Compiler(file=t, moduleName=os.path.splitext(outfile)[0]).moduleDef()
            f = open(outpath + outfile, "w+t")

The routine checks to see if the template file (.tmpl) has been modified since the last compilation and optionally recompiles. 

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Published by


Husband, father, brother, software developer. CTO @WanderfulMedia