home > Use Mako template engine in webpy

Use Mako template engine in webpy

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',
        )

[edit][history][backlinks] last modified September 30