[Grok-dev] Re: Skinning/themeing

Martijn Faassen faassen at startifact.com
Sat May 19 17:11:40 EDT 2007


Martin Aspeli wrote:
>>>> class MyView(quarry.View):
>>>>    """<html metal:use-macro="context/@@master/page">
>>>>       <body metal:fill-slot="body">
>>>>       <span tal:replace="structure provider:myviewlets" />
>>>>       </body>
>>>>       </html>
>>>>      """
>>>>    template = grok.PageTemplate(__doc__)
>>> Yipes! I realise this is just an example, but the idea of using the
>>> docstring like that feels very dirty. :)
>>
>> I would submit that for short clips, what documents a view class
>> better than the code itself? :)
> 
> I completely disagree. The use of __doc__ there is illogical.
> 
> class MyView(quarry.View):
> 
>     template = grok.PageTemplate("""\
> <p>foo</p>
> """)
> 
> That makes a lot more sense, and it's a lot clearer what that HTML does. 
> In the example you gave, if I didn't realise __doc__ was being 
> overloaded as input to a page template, I'd be scratching my head as to 
> why you pasted HTML into a doc string.

Actually we already have had this from the beginning:

class MyView(grok.View):
    pass

myview = PageTemplate("""
<p>My template goes here</p>
""")

i.e. instead of putting a page template in <module>_templates you can 
always define it on module-level.

Kevin must have a reason not to use this?

[snip]
>> This does bring up a good point, where is the line drawn for
>> convention-over-configuration. I think that Martijn and Phillip have
>> done a great job of deliberating this and I certainly defer to them in
>> these aesthetic matters.
> 
> Completely. It's dangerous if we end up with a "too many cooks" feel to 
> the framework. Maybe we need some high level guidelines of what type of 
> CoC we want to have?

This work is being done in an extension. I'm glad the exploration is 
taking place at all (and glad to see Martin give feedback to it, 
something I haven't gotten around to doing yet). Rest assured we're not 
going to move this into the Grok core without some additional thought. 
We should indeed be careful in deriving configuration from conventions.

Name-based ordering is not something we've done before. We use names for 
association with templates. We also have one other case - if your 
classname ends with 'Base', you indicate you don't want it to be 
registered as it's a base class. You can also use grok.base() to 
indicate the same thing, and perhaps this means the name construct could 
actually go away here.

Um, some attempt at expressing what's being looked at now:

* base classes of classes found in a module

* classes of instances found in a module

* module name (to find templates directory)

* names of classes

* names of instances

* being in the same module as a context

* schema fields

* directives

Another aspect I'd like to be able to look at in the future for deriving 
configuration information is order of definition within a module. This 
can be used for ordering (where this is useful; I can think of viewlet 
order and perhaps menu entry order), and grouping (group a bunch of 
objects into a single context).

Regards,

Martijn



More information about the Grok-dev mailing list