[Grok-dev] Re: viewlets, pagelets and friends
Luis De la Parra
lparrab at gmx.net
Thu Aug 9 18:37:31 EDT 2007
Hi Darryl,
Darryl Cousins wrote:
[...]
> Fair call. I don't know either. The mars packages grew out a desire to
> replicate z3c.formdemo using grok/martian. Mars makes configuration more
> explicit than with vanilla grok and I doubt would ever be integrated
> into grok (partly also because the grok namespace would grow way to
> large with declarations and components).
>
I just had a look at it, and well... first of all I must confess I haven't
got the concept of viewlets/pagelets yet, and why you'd want to separate
the templates making a 3-registration process per page, but...
============== view.txt in mars.view:
>>> layoutTemplate = os.path.join(temp_dir, 'layoutTemplate.pt')
>>> open(layoutTemplate, 'w').write('''<div>My layout template</div>''')
>>> class LayoutView(mars.view.LayoutView):
... """This is the view class"""
... grok.context(zope.interface.Interface)
>>> class LayoutViewTemplate(mars.template.LayoutFactory):
... """This is a template"""
... grok.template(layoutTemplate)
... grok.context(LayoutView)
===============
I don't get what the purpose of the template-factorys is...I mean, what is
the advantage of registering the views/layouts in this way, instead of just
class LayoutView(mars.view.Layout)
grok.context(Interface)
grok.template(layoutTemplate)
but if you were to write something like that, what would be the difference
to a plain grok.View?
The same goes for the Pagelet... instead of having
======mars.view / view.txt =========
>>> class PageletView(mars.view.PageletView):
... """This is the view class"""
... grok.context(zope.interface.Interface)
>>> class PageletViewLayout(mars.template.LayoutFactory):
... """This the layout template looked up by the __call__ method of
view"""
... grok.template(pageletTemplate)
... grok.context(PageletView)
>>> class PageletViewTemplate(mars.template.TemplateFactory):
... """This the view template looked up by render method"""
... grok.template(viewTemplate)
... grok.context(PageletView)
====================================
why not just?
class MyPagelet(mars.view.PageletView)
grok.context(Interface)
mars.view.layout(pageletTemplate) # looked up on __call__()
grok.template(viewTemplate) # looked up by render()
..and again, grok.View provides __call__, update, and render methods.
I think the difference must be in the interfaces for which they are
registered. ie, register the layout for "Interface" to get a common layout
for all views, and a view-specific "view-layout" (which would be
equivalent, but imho more elegant than the "normal way" of one template
only per view which calls standard_macros ) but from the examples I've seen
I haven't been able to figure it out. =(
cheers. luis
More information about the Grok-dev
mailing list