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!
*sigh* ;)
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
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.
(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 ;)
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).
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
Hey, no fair hitting me at my weak spots ;)
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 :)
I think Genshi provides exactly the amount of separation that I feel is best. This is a matter of engineering taste.