2 Interface to various templating engines.
7 "render_cheetah", "render_genshi", "render_mako",
12 """Rendering interface to Cheetah Templates.
16 render = render_cheetah('templates')
17 render.hello(name="cheetah")
19 def __init__(self, path):
20 # give error if Chetah is not installed
21 from Cheetah.Template import Template
24 def __getattr__(self, name):
25 from Cheetah.Template import Template
26 path = os.path.join(self.path, name + ".html")
29 t = Template(file=path, searchList=[kw])
35 """Rendering interface genshi templates.
38 for xml/html templates.
40 render = render_genshi(['templates/'])
41 render.hello(name='genshi')
45 render = render_genshi(['templates/'], type='text')
46 render.hello(name='genshi')
49 def __init__(self, *a, **kwargs):
50 from genshi.template import TemplateLoader
52 self._type = kwargs.pop('type', None)
53 self._loader = TemplateLoader(*a, **kwargs)
55 def __getattr__(self, name):
56 # Assuming all templates are html
59 if self._type == "text":
60 from genshi.template import TextTemplate
67 t = self._loader.load(path, cls=cls)
69 stream = t.generate(**kw)
71 return stream.render(type)
73 return stream.render()
77 """Rendering interface to Jinja2 Templates
81 render= render_jinja('templates')
82 render.hello(name='jinja2')
84 def __init__(self, *a, **kwargs):
85 extensions = kwargs.pop('extensions', [])
86 globals = kwargs.pop('globals', {})
88 from jinja2 import Environment,FileSystemLoader
89 self._lookup = Environment(loader=FileSystemLoader(*a, **kwargs), extensions=extensions)
90 self._lookup.globals.update(globals)
92 def __getattr__(self, name):
93 # Assuming all templates end with .html
95 t = self._lookup.get_template(path)
99 """Rendering interface to Mako Templates.
103 render = render_mako(directories=['templates'])
104 render.hello(name="mako")
106 def __init__(self, *a, **kwargs):
107 from mako.lookup import TemplateLookup
108 self._lookup = TemplateLookup(*a, **kwargs)
110 def __getattr__(self, name):
111 # Assuming all templates are html
112 path = name + ".html"
113 t = self._lookup.get_template(path)
117 """Cache for any rendering interface.
121 render = cache(render_cheetah("templates/"))
122 render.hello(name='cache')
124 def __init__(self, render):
125 self._render = render
128 def __getattr__(self, name):
129 if name not in self._cache:
130 self._cache[name] = getattr(self._render, name)
131 return self._cache[name]