Begin forwarded message:
> From: Christopher Lenz <[EMAIL PROTECTED]>
> Date: June 29, 2007 12:10:54 PM GMT-04:00
> To: pytemplates <[EMAIL PROTECTED]>
> Subject: Re: Pylons/TurboGears templating
> Reply-To: [EMAIL PROTECTED]
>
>
> On 28 Jun., 00:10, "Mike Orr" <[EMAIL PROTECTED]> wrote:
>> DOTTED NAMING
>> ==========
>> I'd rather drop this completely but I suspect there'll be howls of
>> protests from TurboGears users as well as Kid/Genshi users that are
>> accustomed to it. The naming system is what determines how a
>> template
>> at /myapp/templates/foo/bar.html is identified in the application.
>> Assuming /myapp/templates is the base path or search path:
>>
>> Path naming: foo/bar.html
>> URI naming: /foo/bar.html
>> Dotted naming: foo.bar
>
> For the record, Genshi uses path names internally, and the dotted
> naming support was only added in the plugin layer, and only to support
> TurboGears. And as the Pylons Buffet implementation seems to only pass
> through paths/URIs to Mako and Myghty, there hasn't been much
> incentive to change to fix the plugin implementation.
>
> Personally, I'd kill dotted naming support in a heartbeat. Genshi
> certainly doesn't require it, and would rather just use path names.
>
> Anyway, does Smorgasbord actually need to even care about this? Can't
> it just pass through the name as-is?
>
>> OPTIONS
>> =====
>> The template options and rendering options ('encoding', 'fragment',
>> etc) are still in my head. Only the options necessary for template
>> lookup are implemented. I still think standard engine-neutral
>> options
>> are the way to go for common stuff, but it will require further
>> research to finish the option handling.
>
> Note that contrary to your Smorgasbord documentation, Genshi doesn't
> actually support "fragment" (there's no need, as Genshi doesn't use an
> inheritance scheme).
> Does that make Kid (and possibly Myghty?) the only template engine
> supporting "fragment"? Maybe it's not even worth standardizing in that
> case?
>
> Also, the difference between "template options" and "rendering
> options" isn't clear to me. It looks like the former should be the
> options passed to the engine when it is initialized, while the latter
> are passed to render() but that doesn't seem to be the case.
>
> On a more general note, I think the Smorgasbord API tries to be/do too
> much. Why should it do template lookup and caching, rather than
> leaving that up to the template engine, or to the framework or
> application. Why define common options such as "exts" if you could
> just leave the way the user references templates to the template
> engine (plugin)? I think that ideally, the Buffet replacement should
> be a very thin layer between the application and the template engine,
> and not make the individual plugins jump through hoops to behave like
> other engines do in some respect. IMHO, the goal shouldn't be to
> enable people to instantly swap out template engines (that wouldn't
> work anyway), it should be to enable web framework users to use the
> template engine of their choosing, without limiting the feature set,
> while still nicely integrated into the framework. Where "nicely
> integrated" means it can be configured along with the rest of the
> webapp config, is initialized with the rest of the framework, etc.
>
> Genshi adds some aspects to this that most other engines don't.
> Essentially, there isn't just a big "give me a filename and a dict, I
> give you a string" step. Instead you have:
> 1. when a template is first loaded, you may want to add some filters
> to it, such as for I18N. You need to make sure this is only done once
> per template instance.
> 2. you then generate a "markup stream" (basically an unserialized
> representation) from a template, passing it the data dictionary
> 3. you may then want to apply filters to that stream, for example for
> HTML form population (think htmlfill without the reparse), or do
> transformations such as adding CSRF protection to any POST forms, etc
> etc
> 4. finally you serialize that stream to a string, using a specific
> format, doctype, encoding, etc
>
> The current Buffet API has a "transform()" function that (in theory*)
> allows one to add stream filtering etc (i.e. point 3. above).
> transform() is basically point 2, while render() was either points 2-4
> or just point 4 (depending on whether you passed in a stream or a
> template name). I guess the Genshi plugin for the new API could do all
> this via a heavily overloaded render() function, but that'd be pretty
> ugly.
>
> * I say "in theory" because e.g. Pylons does not make that feature
> conveniently accessible to applications, so it goes unused even for
> Genshi-based apps
>
> Cheers,
> Chris
> --
> http://www.cmlenz.net/
>
>
> >
--
Kevin Dangoor
TurboGears
email: [EMAIL PROTECTED]
company: http://www.BlazingThings.com
blog: http://www.BlueSkyOnMars.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"TurboGears Trunk" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/turbogears-trunk?hl=en
-~----------~----~----~----~------~----~------~--~---