[Grok-dev] Viewlets

Souheil CHELFOUH trollfot at gmail.com
Thu Jul 15 02:55:46 EDT 2010


you can have a look at the "dolmen.app.layout" package, on pypi, that
will show you some code doing exactly what Jure proposed.

2010/7/15 jure <jcerjak at termitnjak.si>:
> On 07/14/2010 04:32 PM, Daniel Lyons wrote:
>> Hi again,
>>
>> I'm still working through _Grok 1.0 Web Development_ but also trying
>> to apply the lessons in a small app that does the same thing as the
>> todo list app, but structured somewhat differently. In the book,
>> pretty much everything winds up in the app.py file, which seems fine
>> for a tutorial, but as I rewrite it I have been trying to break things
>> down into app.py, todolist.py and todo.py but I've run into a
>> connundrum with handling viewlets. So I now think I may have
>> completely lost how viewlets work in my mind.
>>
>> In general, how does one use viewlets to structure an application? I
>> have the master template in app_templates/master.pt but it seems as
>> though to use this template the view must be in app.py rather than
>> (say) todolist.py. Also, I'm wondering why it's strictly necessary to
>> have both a view and viewlet class. Seems like it's going to lead to
>> twice as many classes, one for each "page" I want to have and one to
>> embed that page in a viewlet. Is that right? Am I misunderstanding
>> something?
>>
>> I did download and go through the Paleosoft sample code, but none of
>> those projects are using viewlets, so it was of somewhat limited
>> utility. Is there a medium-sized Grok project I can refer to that does
>> things right and uses viewlets?
>>
>> Thanks again,
>>
>>
>
>
>
> hi,
>
> i had a quick look at how the layout is done in the Grok book, but I've
> done it
> slightly differently in my project, the megrok.layout way, so be sure to
> check the
> http://pypi.python.org/pypi/megrok.layout/0.9 for more info.
>
> The procedure:
>
> 1. Define your viewlet managers and viewlets
>
> 2. Define a layout for your application
>
> import grok
> from zope.interface import Interface
>
> grok.templatedir('templates')
>
> class MyLayout(Layout):
>     grok.context(Interface)
>     title = u"My layout"
>
> 3. in the templates directory create a master layout template mylayout.pt
>    and the viewlet templates. My layout template looks something like this:
>
> <html>
> <head>
> <tal:block tal:content="structure provider:headslot" />
> </head>
> <body>
> <div id="header">
> <tal:header tal:content="structure provider:header" />
> </div>
> <div id="content" tal:content="structure view/content" />
> <div id="footer">
> <tal:footer tal:content="structure provider:footer" />
> </div>
> </body>
> </html>
>
>
> So, we have a couple of viewlet managers which render the asigned viewlets,
> and the <div id="content" tal:content="structure view/content" /> part,
> which renders the content from your views and forms.
>
> 4. For this magic to work, you have to use layout aware view components:
>  instead of grok.View use megrok.layout.Page, instead of grok.AddForm
>  use megrok.layout.AddForm, etc.
>
> You can put the layout code and the templates wherever you like, my folder
> structure lookes like this(I hate large modules, with everything crammed
> in :) ):
>
> layout/
>     layout.py
>     viewletmanagers.py
>     viewlets.py
>     templates/
>         mylayout.pt
>         loginviewlet.pt
>         navigationviewlet.pt
>         ...
>
>
> I hope it makes sense now(and that my newbie explanation is correct :)),
> I can also send you the source if you'd like..
>
>
> Regards,
>
> jure
> _______________________________________________
> Grok-dev mailing list
> Grok-dev at zope.org
> https://mail.zope.org/mailman/listinfo/grok-dev
>


More information about the Grok-dev mailing list