degal/template.py
author Tero Marttila <terom@fixme.fi>
Fri, 05 Jun 2009 19:30:15 +0300
changeset 57 8d06e0283b88
parent 47 189f331c7960
permissions -rw-r--r--
start implementing new Image stuff, tie in RenderMachine into the new Image class, assoicated config stuff
from mako import exceptions
from mako.lookup import TemplateLookup

import settings, resources, helpers

import log

"""
    Locating and rendering templates
"""

_lookup = TemplateLookup(
    directories=[resources.TEMPLATE_DIR], 
#    module_directory='%s/cache' % settings.TEMPLATE_DIR, 
    output_encoding='utf-8',
    filesystem_checks=False,        # this may need to be changed if used in a long-term process
)

TEMPLATE_GLOBALS = dict(
    h                          = helpers,
    version                    = settings.VERSION,
)

class Template (object) :
    def __init__ (self, name) :
        self.name = name
        self.tpl = _lookup.get_template("%s.%s" % (name, settings.TEMPLATE_EXT))
    
    def render (self, **data) :
        data.update(TEMPLATE_GLOBALS)
        
        try :
            log.debug("render %s with %s", self.name, data)
            return self.tpl.render(**data)
        except :
            data = exceptions.text_error_template().render()
            log.error(data)
            
            raise
    
    def render_to (self, file, **data) :
        fh = open(file, "w")
        fh.write(self.render(**data))
        fh.close()
    
# templates
gallery = Template("gallery")
image = Template("image")