#!/usr/bin/python from __future__ import with_statement import os import web import mako from mako.lookup import TemplateLookup from functools import partial import helper APPDIR = os.path.dirname(os.path.abspath(__file__)) def appdir (*args): return os.path.join(APPDIR, *args) class Renderer: def __init__ (self): self.lookup = TemplateLookup(directories=[appdir('templates')], module_directory = "/tmp/portato/", input_encoding='utf-8', output_encoding='utf-8', format_exceptions = True) def render (self, tpl, **kwargs): try: t = self.get_tpl(tpl) except mako.exceptions.TopLevelLookupException, e: raise web.notfound(e) return t.render(h = helper, url = helper.url, w = web, **kwargs) __call__ = render def get_tpl (self, tpl): return self.lookup.get_template(self.get_tpl_name(tpl)) def get_tpl_name (self, tpl): if not tpl.endswith(".mako"): tpl = tpl+".mako" return os.path.join("pages", tpl) urls = ("/(.*)", "Handler") app = web.application(urls, globals()) render = Renderer() class Handler: def GET(self, name = '/'): if not name or name == '/': name = 'index' return render(name) if __name__ == "__main__": app.run()