[Grok-dev] Re: grok.PageTemplate and content types

Martijn Faassen faassen at startifact.com
Fri Jan 12 14:44:46 EST 2007


Philipp von Weitershausen wrote:
[snip]
> No need for a mime type directive, you can always do 
> response.setHeader('Content-Type', 'text/xml') from anywhere in your 
> view. Or perhaps I'm misinterpreting what problem this grok.mime_type 
> directive is supposed to solve.

No, I think you're right. I got side-tracked.

> To solve JW's problem, we really just need an explicit way to specify 
> the parser type in ZPTs. I suggested file extensions, JW suggested a 
> parameter when instantiating templates. I think a solution somewhere 
> along or between those lines can be found.

Ah, I understood that before but then I got lost in all the discussion.

One of the interesting problems we have here is that we want to pass a 
parameter *specific to the ZPT engine* along. So far Grok's template 
story was more or less template-engine neutral and I'd like any changes 
to keep it that way.

That would mean a 'mime_type' parameter to grok.template would be out. 
Your proposal of specific file extensions works, but I still don't like 
for other reasons.

I could imagine a grok.templating_parameters directive specifically to 
control the behavior of a page template:

class MyView(grok.View):
     grok.templating_parameters(parser='xml')

This directive would be special in that it would just stuff a lot of 
stuff expected to be picked up by a template engine onto the view. For 
ZPT that might be the parser option. It'd basically stuff in the **kw, 
and the template engine part is responsible for reading it and doing 
something with it (and perhaps give a GrokError if it can't be 
comprehended).

This would be templating engine agnostic. If you put in a Genshi 
template it'd be picked up by its file extension and you could pass it 
other parameters:

class MyGenshiView(grok.View):
     grok.templating_parameters(whatever_we_want_to_tell_genshi=True)

I call this 'templating_parameters', which is verbose, and explicitly 
not 'template_parameters', which is too ambiguous. This means it stands 
out, which is fine in this case. Since it's a directive, it'll subclass, 
so if you have a lot of templates that all need the XML parser for ZPT, 
you could, if you wanted to, do this:

class ZPTXMLBase(grok.View):
     grok.templating_parameters(parser='xml')

and just subclass it.

Regards,

Martijn



More information about the Grok-dev mailing list