Problem
How to use Mako template engine in webpy?
Solution
You need to install both Mako and webpy(0.3) first: http://www.makotemplates.org/. And then try out the following code snippet:
# encoding: utf-8
# File: code.py
import web
from web.contrib.template import render_mako
urls = (
'/(.*)', 'hello'
)
app = web.application(urls, globals(), autoreload=True)
# input_encoding and output_encoding is important for unicode
# template file.
# Reference:
# http://www.makotemplates.org/docs/documentation.html#unicode
render = render_mako(
directories=['templates'],
input_encoding='utf-8',
output_encoding='utf-8',
)
class hello:
def GET(self, name):
return render.hello(name=name)
# Another way:
#return render.hello(**locals())
if __name__ == "__main__":
app.run()
Template file:
## File: templates/hello.html
您好:${name}
Note:
if you use Apache + mod_wsgi to deploy webpy apps, you may get the similar error msg in your apache error log:
[Sat Jun 21 21:56:22 2008] [error] [client 192.168.122.1] TopLevelLookupException: Cant locate template for uri 'index.html'
You have to specify location of templates as absolute path as no guarantees as to what current working directory will be.
See section 'Application Working Directory' of:
http://code.google.com/p/modwsgi/wiki/ApplicationIssues
You can use relative paths in order to make it easier too. e.g.
import os
render = render_mako(
directories=[os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),],
input_encoding='utf-8',
output_encoding='utf-8',
)
