[Grok-dev] Alternative Layout System in Grok with z3c.template/z3c.pagelet

Souheil CHELFOUH trollfot at gmail.com
Fri Mar 20 05:48:05 EDT 2009


I guess we could do a 'return grok.View.__call__()', that sounds good

2009/3/20 Christian Klinger <cklinger at novareto.de>:
> Hi
>
> Yes then we get the page without a layout.
>
> What do you think?
>
> Christian
>> forgot to reply to all :)
>>> You mean, it should simply does 'return self.render()' if no layout is found ?
>>
>>
>>
>>
>>> 2009/3/20 Christian Klinger <cklinger at novareto.de>:
>>>> Hi Souheil,
>>>>
>>>> i ´ve added your suggestions into megrok.pagelet.
>>>>
>>>> What do you think about not raising an error
>>>> if there is no layout found. Instead return only the
>>>> template not rendered in a layout. So you can use
>>>> always the Pagelet component and you don´t need grok.View.
>>>> No matter if you want the pagelet renderd in a layout
>>>> or not.
>>>>
>>>> I had a disucssion with faassen about this topic. Maybe he
>>>> can jump in give us his opinion...
>>>>
>>>> Thanks Christian
>>>>
>>>>> I checked out the last version and here are my suggestions :
>>>>>
>>>>>
>>>>> ===== component.py =====
>>>>>
>>>>> import grok
>>>>> from zope.component import queryMultiAdapter
>>>>> from z3c.template.interfaces import ILayoutTemplate
>>>>> from zope.publisher.publish import mapply
>>>>>
>>>>>
>>>>> class Layout(object):
>>>>>     """ A basic class for Layouts"""
>>>>>     pass
>>>>>
>>>>>
>>>>> class Pagelet(grok.View):
>>>>>     """This is the BaseClass for view Pagelets
>>>>>     """
>>>>>     grok.baseclass()
>>>>>     layout = None
>>>>>
>>>>>     def render(self):
>>>>>         return self._render_template()
>>>>>
>>>>>     render.base_method = True
>>>>>
>>>>>     def __call__(self):
>>>>>         """Calls update and returns the layout template which calls render."""
>>>>>         self.update()
>>>>>         if self.layout is None:
>>>>>             layout = queryMultiAdapter(
>>>>>                 (self.context, self.request), ILayoutTemplate)
>>>>>             if layout is None:
>>>>>                 raise NotImplementedError(
>>>>>                     """Impossible to find a suitable layout for %r.
>>>>>                     This is an unimplemented siutation. Please, provide
>>>>>                     a useable layout or check your components.""" % self
>>>>>                     )
>>>>>             return layout(self)
>>>>>         return self.layout()
>>>>>
>>>>>
>>>>> class FormPageletMixin(object):
>>>>>     """This is the BaseClass for form Pagelets
>>>>>     """
>>>>>     layout = None
>>>>>
>>>>>     def __call__(self):
>>>>>         """Calls update and returns the layout template which calls render.
>>>>>         """
>>>>>         mapply(self.update, (), self.request)
>>>>>         if self.request.response.getStatus() in (302, 303):
>>>>>             return
>>>>>
>>>>>         self.update_form()
>>>>>         if self.layout is None:
>>>>>             layout = queryMultiAdapter(
>>>>>                 (self.context, self.request), ILayoutTemplate)
>>>>>             if layout is None:
>>>>>                 raise NotImplementedError(
>>>>>                     """Impossible to find a suitable layout for %r.
>>>>>                     This is an unimplemented siutation. Please, provide
>>>>>                     a useable layout or check your components.""" % self
>>>>>                     )
>>>>>             return layout(self)
>>>>>         return self.layout()
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> 2009/3/19 Christian Klinger <cklinger at novareto.de>:
>>>>>> Hi,
>>>>>>
>>>>>>
>>>>>>> I understand the problem, now. Using the View grokker, the template
>>>>>>> validation fails because of the provided render method.
>>>>>>> Even more, the Pagelet does provide the IGrokView interface from
>>>>>>> grokcore.view, not grok, so no application_url nor flash.
>>>>>>> Though, these methods are needed in case of grok app devs. It's really
>>>>>>> too bad that there no grokcore.view.View mixin nor grok.View one, to
>>>>>>> allow the reusability of these methods and save some code duplication.
>>>>>> yes you are right in your point of view. I had a look to the
>>>>>> implementation of grokcore.viewlet it´s the same in this module. The
>>>>>> namespace, default_namespace, and __init__ are nearly the same as in
>>>>>> grok.View.
>>>>>>
>>>>>> For the megrok.pagelet.Pagelet i will implement the interface form grok
>>>>>> and not grokcore.View so we should have the application_url and flash.
>>>>>>
>>>>>> Thanks again for your feedback
>>>>>> Christian
>>>>>>
>>>>>>
>>>>>>> 2009/3/18 Souheil CHELFOUH <trollfot at gmail.com>:
>>>>>>>> As far as I can see, Pagelets are Views with a different __call__
>>>>>>>> method that looks for the layout.
>>>>>>>> I also see that you entirely recoded the grokker for that component.
>>>>>>>> Wouldn't that be smart to make a megrok.pagelet.Pagelet  inherit from
>>>>>>>> grok.View as a baseclass, and simply redefine the __call__ method and
>>>>>>>> the namespace (if needed) ?
>>>>>>>> Here, using a brand new component will make it hardly maintainable, as
>>>>>>>> it already lacks 'flash' and 'application_url' from the IGrokView.
>>>>>>>>
>>>>>>>>
>>>>>>>> 2009/3/18 Jan Ulrich Hasecke <juhasecke at googlemail.com>:
>>>>>>>>> Am 18.03.2009 um 10:12 schrieb Christian Klinger:
>>>>>>>>>
>>>>>>>>>> This is a short summary what?s the current status of
>>>>>>>>>> megrok.pagelt:
>>>>>>>>> Is there any example code. I would like to play around and need a
>>>>>>>>> kick-start.
>>>>>>>>>
>>>>>>>>> juh
>>>>>>>>> _______________________________________________
>>>>>>>>> Grok-dev mailing list
>>>>>>>>> Grok-dev at zope.org
>>>>>>>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>>>>>>>>
>>>>>>>>>
>>>>>> _______________________________________________
>>>>>> Grok-dev mailing list
>>>>>> Grok-dev at zope.org
>>>>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>>>>>
>>>> _______________________________________________
>>>> Grok-dev mailing list
>>>> Grok-dev at zope.org
>>>> http://mail.zope.org/mailman/listinfo/grok-dev
>>>>
>
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> http://mail.zope.org/mailman/listinfo/grok-dev
>


More information about the Grok-dev mailing list