degal/template.py
author Tero Marttila <terom@fixme.fi>
Wed, 03 Jun 2009 19:40:35 +0300
branchuse-distutils
changeset 47 189f331c7960
parent 44 533b7e8b5d3b
permissions -rw-r--r--
fix template to use pkg_resources, bin/degal does now run
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")