[Web-SIG] A trivial template API counter-proposal

Ian Bicking ianb at colorstudy.com
Sun Feb 5 21:36:40 CET 2006

Phillip J. Eby wrote:
>>This topic started with Buffet, the de-facto standard templating API for
>>CherryPy. Buffet is just about textual templating, which is a good
>>thing. That's why it's very simple, and is thus actually being used.
> Which is precisely why we don't need to rush into blessing it as some kind 
> of web standard, when it doesn't have anything to do with the "web", as far 
> as I can tell.  If I needed a plugin for pure text or XML templating (as 
> opposed to *web application* templates), or I were creating a pure text or 
> XML output generator, I would absolutely use the TG/Buffet API, no 
> question.  It is 100% the right tool for the job, and the de facto standard 
> as well.
> But I'm also 100% positive that it is *not* suitable to be declared a 
> Python *web* standard by itself: it's not about the web at all.  The web 
> just happens to be where it's being used at the moment, and only in 
> frameworks where the use cases slot neatly together with it.  Heck, just 
> look at the API documentation and see if you can find the word "web" or 
> even "request" mentioned on the page:
>    http://www.turbogears.org/docs/plugins/template.html

It is not a complete spec that fits many use cases at this time.  It 
won't be sufficient for TG either before long -- Kevin has already said 
that he'd like a find_template function somewhere in there.

Because the spec suggests that templates are given module-like names 
coinciding with the package of the consuming software, it is hard to use 
in any way where the templates themselves are taken from arbitrary 
locations.  It doesn't actually specify how the names are interpreted or 
how the templates are found, but all the implementations so far use 
pkg_resources and load templates in a way that makes it difficult to 
load arbitrary files.

This probably seemed sensible since the first couple languages -- Kid 
and Cheetah -- compile to Python modules.  But while it seems sensible, 
Python modules are far more difficult to work with than simpler 
metaphors for a compiled template -- you get import hooks, rather 
complicated recompilation steps, and add one more thing to the already 
complex task of managing sys.path.

So no, this isn't sufficient now.  I think very minor fixes could 
improve it -- for instance, allow template_filename as an argument 
instead of only template_name.  Then at least simple template filling 
would be handled well (e.g., enough for Paste Script), though it is 
unlikely (with only those specs) that templates will handle including 
other templates very well, as there's not even sufficient information 
given for the template language to figure out the programmer's intent.

Ian Bicking  |  ianb at colorstudy.com  |  http://blog.ianbicking.org

More information about the Web-SIG mailing list