Skip to main content

Python: Mako

There's a new Python templating engine called Mako. It's basically a modern, more-Pythonic version of Myghty, which is a Python version of Mason. It makes sense to switch if you're already using Myghty. It also makes sense to use if you're a Python guy who wants to avoid learning something new and just wants to dump a bit of Python in the middle of some HTML.

I like Mike Bayer, Mako's author, but I prefer Genshi. Nonetheless, if Mike wants to go out and write another templating engine, more power to him!

However, my feeling is that Python needs another templating engine like I need another open source kernel!
<sarcasm>Yeah, thanks a lot Apple! Sure, Darwin's great! Too bad I can't use my airport card!</sarcasm>
Seriously, I'd be a lot happier if they kept Darwin and released Cocoa. Now, that would be progress.

*sigh* ;)

Comments

gaspode said…
The other bit worth mentioning is that Mako is 10-16x faster than Genshi and about 4-7x faster than Myghty/Django. If you need speed, this definitely matters. While not everyone needs such speed, certain apps that are expected to have high loads and can't be cached definitely benefit from this.

I think its great that there's an excellent choice for XML-based templating (Genshi), and hope that Mako will be the cream of the crop for non-XML templating. There's certainly room for excellence in both categories, and I think Mako has a significantly more elegant feel to it than Cheetah has ever given me.
zzzeek said…
we know you prefer Genshi, but I know that you *love* those component-calls-with-content too :). Mako adds some new twists on them Myghty never had.
matt said…
so JJ, what is it about Genshi that you prefer over Mako? Is it only the well-formed XML? Curious minds want to know.

(I'm now happy that I never bothered much to learn Genshi, since Mako seems to gel better with my brain... But maybe if I wait another month, I'll get another choice of templating languages ;)
Anonymous said…
These templating languages are highly code convenient --- which is nice. However, for separation between code and presentation (i.e., the holy grail) at the opposite end of the spectrum, you may want to look at StringTemplate:

http://www.stringtemplate.org/

which is available as PyStringTemplate 2.2 (as well as Java and C#). StringTemplate is very powerful and concise (in a functional programming style) yet avoids "leak"ing code into the presentation. Perfect for html.

FYI, the design of StringTemplate 3.0 is even more powerful and was driven by antlr 3.0 code generation (powerful templating) needs.

For example, StringTemplate has template inheritance (reuse of templates by inheritance) and ST 3.0 also has Template "regions" which were invented independently but match django's "blocks". I like to think of them as parameterized inheritance, where you can piecemeal substitute a particular sub-region/block with your custom sub-region/block while inheriting the rest of the template. The key is that you substitute a piece of an inherited template while reusing the template as a whole. Much more fine-grained than just template inheritance --- and therefore mighty useful for HTML header substitution, etc..

In any case, StringTemplate should be considered if looking for an industrial grade template engine where code and presentation separation is sought (or required).
> The other bit worth mentioning is that Mako is 10-16x faster than Genshi and about 4-7x faster than Myghty/Django. If you need speed, this definitely matters.

Agreed

> While not everyone needs such speed, certain apps that are expected to have high loads and can't be cached definitely benefit from this.

Agreed

> I think its great that there's an excellent choice for XML-based templating (Genshi), and hope that Mako will be the cream of the crop for non-XML templating. There's certainly room for excellence in both categories,

Agreed
> we know you prefer Genshi, but I know that you *love* those component-calls-with-content too :)

Hey, no fair hitting me at my weak spots ;)
> so JJ, what is it about Genshi that you prefer over Mako?

1. I like the inverse inheritance thing via includes. Mako can do the same type of thing.

2. I like the XPath thing. This is perhaps the biggest selling point for me. I have to write the common look-and-feel for multiple apps. Using XPath to tweak any part of the look-and-feel for any given page is quite powerful.

3. I like the way Genshi is really smart about escaping HTML that I don't write myself. I'm tired of the XSS problem, and Genshi makes a lot of the problem go away.

4. I like the fact that Genshi has three syntaxes: something like Nevow, something like Cheetah, and something like Kid. I can have my cake, with the frosting, and eat it too :)
> These templating languages are highly code convenient --- which is nice. However, for separation between code and presentation (i.e., the holy grail) at the opposite end of the spectrum, you may want to look at StringTemplate:

I think Genshi provides exactly the amount of separation that I feel is best. This is a matter of engineering taste.