lib/template.py
author terom
Thu, 31 Jan 2008 19:19:05 +0000
changeset 30 b1d5c32ab771
parent 28 70b6c13d084f
permissions -rw-r--r--
moar tweaks/small bugfixes
# DeGAL - A pretty simple web image gallery
# Copyright (C) 2007 Tero Marttila
# http://marttila.de/~terom/degal/
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the
# Free Software Foundation, Inc.,
# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#

from mako import exceptions
from mako.lookup import TemplateLookup

import settings, helpers

import log

_lookup = TemplateLookup(
    directories=[settings.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")