Mako is a template library written in Python. It provides a familiar, non-XML syntax which compiles into Python modules for maximum performance. Mako's syntax and API borrows from the best ideas of many others, including Django templates, Cheetah, Myghty, and Genshi. Conceptually, Mako is an embedded Python (i.e. Python Server Page) language, which refines the familiar ideas of componentized layout and inheritance to produce one of the most straightforward and flexible models available, while also maintaining close ties to Python calling and scoping semantics.
Mako is used by the python.org website as the basis for their site build system (README), as well as by reddit.com for their newly launched beta site. It is the default template language included with the Pylons web framework.
<%inherit file="base.html"/> <% rows = [[v for v in range(0,10)] for row in range(0,10)] %> <table> % for row in rows: ${makerow(row)} % endfor </table> <%def name="makerow(row)"> <tr> % for name in row: <td>${name}</td>\ % endfor </tr> </%def>
Python is a great scripting language. Don't reinvent the wheel...your templates can handle it !
Well, not totally true. Mako is effectively the replacement for the Myghty templating system, and is now the default template language for the Pylons web framework (a framework which originally grew out of Myghty). Compared to Myghty (and Myghty's inspiration HTML::Mason) it's a vastly simplified and totally Python-centric system which is much better suited to the current generation of WSGI frameworks. And it does offer features that aren't found in any other template language.
from mako.template import Template
print Template("hello ${data}!").render(data="world")
For filesystem management and template caching, add the TemplateLookup class.
| Mako: | 1.10 ms | Myghty: | 4.52 ms | |
| Cheetah: | 1.10 ms | Genshi: | 11.46 ms | |
| Django: | 2.74 ms | Kid: | 14.54 ms |
To get started, visit the documentation and the download page.
Mako is covered by the MIT License.