Pylons: Mako Templates in AuthKit ++++++++++++++++++++++++++++++++++++ :Posted: 2007-08-14 11:47 :Tags: Pylons, Python, Web, AuthKit AuthKit's ``form`` and ``openid`` methods take a ``authkit.form.template.obj`` or ``authkit.openid.template.obj`` argument which is a Paste import string to a function which returns a template. This is very handy if you want AuthKit to render a sign in page which looks the same as the rest of your site because you can use your existing templates. Here's how... If your project was named ``myproject`` you could create a file in ``myproject/lib/auth.py`` which looks like this:: import pylons from pylons.templating import Buffet from pylons import config import myproject.lib.helpers as h class MyBuffet(Buffet): def _update_names(self, ns): return ns def_eng = config['buffet.template_engines'][0] buffet = MyBuffet( def_eng['engine'], template_root=def_eng['template_root'], **def_eng['template_options'] ) for e in config['buffet.template_engines'][1:]: buffet.prepare( e['engine'], template_root=e['template_root'], alias=e['alias'], **e['template_options'] ) class State: pass c = State() c.user = 'None' def make_template(): return buffet.render( template_name="/core/derived/signin.mako", namespace=dict(h=h, c=State()) ).replace("%", "%%").replace("FORM_ACTION", "%s") There is quite a lot of boiler plate because you need to setup your own instance of buffet just for this rendering but it does all work. You can then set the AuthKit config option like this:: authkit.form.template.obj = myproject.lib.auth:make_template