Steinar H. Gunderson wonders

about how to do proper HTML templating nowerdays.

First of all, I stick to XHTML 1.0, not 1.1 for now. Compatibility appears to be better with that version (or at least the output enginge of libxslt is better tuned for this doctype, make sure to set the doctype!)

One way to do templating for HTML is to generate an XML file, and write a stylesheet to transform it. While this allows full flexibility, and you can do really nice things in XSLT especially when using e.g. document() (and thus use a template that is plain XHTML) or the document extension, I do not recommend using XSLT for templates in real-world projects. Too few people understand XSLT, I’ve blogged about the problems of xslt before.

Using XML attributes in XHTML files is a great way to do templates. I’ve discovered this technique when investigating Zope:

Zope Template Attribution Language looks convincing to me, but is still somewhat a work in progress (i.e. there are proposed changes)

There is also an extended version of it, called Macro Expansion for TAL.

Why is this solution superior to most others? These templates usually are valid XHTML, and often can be edited by “designers” with their favourite broken windows tools such as WeamDreaver. In many cases, these tools will just leave the attributes alone. So fixing the templates after the designed decided for a design changes becomes easy.

Whenever I need to do some templates, I try to do something similar. usually I don’t have high requirements, and I’m too lazy to investigate available librarys for it, so usually I just annotate the template with either some custom attributes or by using the id and name attributes of XHTML, and then replace the contents of these tags with DOM calls. Works fine in most cases, and you can even do simple loop constructs.

But I, too, am lacking a convincing templating system I can feed with my data sources (preferably with some pull API) and have it do all the work.

Btw, it should be possible to do an TAL processor in XSLT… ;-)

[Update: Yeah, I somehow mixed up document() and the document exslt tag. fixed I also noted that there is a Python SimpleTal package in Debian I havn’t tried yet.]