[Web-SIG] Standardized template API

Phillip J. Eby pje at telecommunity.com
Wed Feb 1 20:49:08 CET 2006

At 12:29 PM 2/1/2006 -0600, Ian Bicking wrote:
>Clark C. Evans wrote:
>>On Tue, Jan 31, 2006 at 09:04:43PM -0600, Ian Bicking wrote:
>>| Phillip J. Eby wrote:
>>| >1. It disadvantages better solutions (whether frameworks or templates) 
>>| >by reducing everything to the least common denominator
>>| | I think exposing load_template is an escape for template languages 
>>that | don't fit into the standard dictionary-in-string-out 
>>approach.  Besides | that, I don't know what Better Solution we're 
>>talking about.
>>I don't see how something like this disadvantages better solutions. If
>>anything, I can see how it would enable quicker adoption of better
>>solutions: an adapter from this "simple" interface to the "better"
>>interface would be easy to construct and thus give out of the gate
>>any better interface a leg-up.
>My criteria is that it would be easy to implement Phillip's proposal in 
>terms of mine (and I could provide a sample implementation of that if it 
>would help), but it doesn't seem so easy to do the opposite.

Actually, I believe you've got that backwards.  Many things the WSGI 
embedding proposal can do, yours can't do *at all*, no matter how much 
programming you do.  vars'n'strings isn't a substitute for WSGI, but it's 
easy to piggyback other payloads *out* of WSGI using file_wrapper-like APIs 
or dual-use objects with "__call__" methods.

>   Maybe not possible, because templates often need to get to raw (not 
> plugin or WSGI wrapped) version of subtemplates (using communication APIs 
> that are not standard and are not part of any of these specs).

For one thing, you can use extension APIs, like wsgi.file_wrapper.  For 
another, note that requiring a compiled template to be a WSGI app doesn't 
require a calling or extending template to restrict itself to interacting 
via WSGI.  If you have some kind of "find_template" extension API that's 
called, the template is free to sniff the returned resource for something 
"better" than WSGI for its purposes, like a Cheetah base template or a 
peak.web IDOMlet, or a PSO tag, or any of a dozen other specialized 
templating technologies.  They just have to *also* be WSGI apps if there's 
any chance they might be used to respond to a page request.

(Example: peak.web IDOMlets have separate methods to behave as a WSGI-like 
response handler and as a fragment generator for insertion into another 
DOMlet's page, which also allows them to be smart about including 
surrounding content; thus they can dynamically "inherit" (to use the common 
slang for applying a layout) depending on whether they are being used as a 
fragment or a full page, and optionally applying content negotiation as 
well.  This is another example of a kind of feature where the 
vars'n'strings proposal seems to fall short of enabling.)

>For instance, there's no way for a Cheetah template to extend a WSGI 
>application.  It can extend other Cheetah templates, and even other Python 
>classes, but not a WSGI app.

Provide extension APIs to allow finding other templates.  Putting them in 
this context also helps make it clear that such APIs aren't -- and *can't* 
be -- universal, because the templates themselves aren't 
heterogeneous.  You can't give a Cheetah template a Kid subtemplate.

I'd prefer to take up template finding in the context of a resource 
deployment proposal, where I think we can get a lot more leverage.  But if 
it enables needed use cases today, I could get behind providing a simple -- 
and *optional* -- template finding API as part of the WSGI 
template/resource proposal, especially if discussing it helps lay the 
groundwork for the resource deployment proposal.

>It's up to you to handle that in your application.  So you might pass in 
>the WSGI environment as some variable, or the specific header, or you 
>might select a template based on that header.

You're presuming a controller-based architecture here, not an 
object-publishing one or a PHP/ASP style "active pages" one.  That's 
ignoring what, maybe half the web frameworks?

More information about the Web-SIG mailing list