import os import web import mako from mako.lookup import TemplateLookup import helper import highlighting class Renderer: """ Renderer loading the correct Mako Templates """ def __init__ (self): self.lookup = TemplateLookup( directories=[helper.appdir('templates')], module_directory = "/tmp/webpy/portato/", input_encoding='utf-8', output_encoding='utf-8', format_exceptions = True) def render (self, tpl, level = "pages" , **kwargs): try: t = self.get_tpl(tpl, level) except mako.exceptions.TopLevelLookupException, e: raise web.ctx.app_stack[-1].notfound(tpl) return t.render(h = helper, url = helper.url, w = web, _hl = highlighting, **kwargs) __call__ = render def get_tpl (self, tpl, level): return self.lookup.get_template(self.get_tpl_name(tpl, level)) def get_tpl_name (self, tpl, level): if not tpl.endswith(".mako"): tpl = tpl+".mako" return os.path.join(level, tpl) # the one and only instance :) render = Renderer()