[Grok-dev] Re: Skinning/themeing
Martin Aspeli
optilude at gmx.net
Fri May 18 20:22:16 EDT 2007
Kevin Smith wrote:
> The work of creating viewlets has been greatly simplified in
> megrok.quarry (based on Lennart's megrok.viewlet work). For example...
>
> 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. :)
> def render(self): pass # trick grok into not requiring
> app_templates/myview.pt
Also yipes, but I'm sure this could be cleaned up.
> class MyViewlets(quarry.ViewletManager):
> grok.context(MyView)
> quarry.name('myviewlets') # provider:myviewlets
>
> class MyViewlet_10(quarry.Viewlet):
> grok.viewletmanager(MyViewlets)
>
> def render(self):
> return "GROK SMASH..."
I assume these names are there for ordering? That really strains the
eyes, though. Why not something like:
class MyFirstViewlet(quarry.Viewlet):
grok.viewletmanager(MyViewlets)
quarry.order(10)
...
> class MyViewlet_20(quarry.Viewlet):
> grok.viewletmanager(MyViewlets)
>
> def render(self):
> return "ZCML"
>
> class MyViewlet_30(quarry.Viewlet): # using inline template
> """<b>SQL</b>
> """
> grok.viewletmanager(MyViewletManager)
> quarry.template(__doc__)
>
> class MyViewlet_40(quarry.Viewlet): # using common templates
> grok.viewletmanager(MyViewlets)
> quarry.template('myproject.common.boxlayout')
>
> def entries(self):
> return ['PHP', 'ASP', 'RUBY']
>
> ... add as many viewlets as you need.
>
> The viewlets are automatically ordered by view name.
That to me is bad convention-over-configuration. It's fine if names of
things are used to find related things (view name -> template name).
Having to artificially constrain names to get the results you want is
really frustrating though. I *hate* aesthetically un-appealing code. It
makes me think of Visual Basic for Applications. :-(
> Viewlets are also
> be more view-l.ike so templates, self.url, self.application_url and the
> like are all available.
Great!
> In ZPT land, Deliverance and MatchView are orthogonal to viewlets. When
> used properly, they are a much simpler and powerful mechanism for
> creating pluggable UI's like Trac uses. If however, Grok were template
> neutral, I'm not sure what kind of a role *if any* viewlets could play.
FWIW, I think template neutrality is YAGNI, and possibly harmful. It's a
nice engineering challenge, and it helps enforce separation of concerns
in code which are probably good practice, but as a user of a framework,
I want the framework authors to have chosen the template solution for
me. And I want all documentation and code examples to use the same
language as well, so that half of it isn't irrelevant to me no matter
which one I choose. How should I know which one is best for me, anyway,
if I'm new to the framework?
Martin
More information about the Grok-dev
mailing list