Skip to main content

A layout component package for zope3 and Grok.

Project description

The megrok.layout package provides a simple way to write view components which can be included into a defined layout. It turns around two main components : the Page and the Layout.

Getting started

First we grok this package’s grokkers:

>>> from megrok.layout import testing
>>> import grokcore.component as grok
>>> testing.grok('megrok.layout')

Layout

The layout is a component allowing you to design your site. Often, it’s the common structure shared between all the pages. Technically, it is a class based on the view components interface, providing a ‘render’ and ‘update’ method.

Let’s implement a simple Layout:

>>> from megrok.layout import Layout
>>> from zope.interface import Interface
>>> class MyLayout(Layout):
...     grok.name('mylayout')
...     grok.context(Interface)
...
...     def render(self):
...         return u"a simple layout"

We grok our component:

>>> grok_component('MyLayout', MyLayout)
True

We check it has been correctly registered:

>>> from megrok.layout import ILayout
>>> from zope.component import getMultiAdapter
>>> from zope.publisher.browser import TestRequest
>>> layout = getMultiAdapter((TestRequest(), Interface), ILayout)
>>> isinstance(layout, MyLayout)
True
>>> layout.render()
u'a simple layout'

Now let’s see how to use this Layout in a specific context using a Page.

Page

The page is the specific code that you want to control. It is based on the grokcore.View browser page implementation and therefore provides a render and update method. The render method will simply return the specific HTML code generated by the template or the render method code while __call__ will lookup for a Layout component and renders itself inside it.

First, we’ll create 2 models that will serve as exemples.

>>> class Aurochs(grok.Context):
...    description = u'Looks like a bull'
>>> class Mammoth(grok.Context):
...    description = u'Looks like an elephant'

Let’s create now a page that will display their description.

>>> from megrok.layout import Page
>>> class AnimalDisplay(Page):
...    grok.name('display')
...    grok.context(Interface)
...
...    def render(self):
...        return self.context.description

Grokking our Page will let us use it.

>>> grok_component('AnimalDisplay', AnimalDisplay)
True
>>> wooly = Mammoth()
>>> page = getMultiAdapter((wooly, TestRequest()), name='display')
>>> page.content()
u'Looks like an elephant'
>>> page()
u'a simple layout'

As we can see, the page is using the layout, on the __call__ to render. Of course, this example Layout doesn’t provide any interesting feature. Let’s create something more interesting, by using our page with the help of the ‘content’ method:

>>> class MammothLayout(Layout):
...     grok.context(Mammoth)
...
...     def render(self):
...         return u'Header. Page: %s. Footer' % self.view.content()
>>> grok_component('MammothLayout', MammothLayout)
True
>>> page()
u'Header. Page: Looks like an elephant. Footer'

Changelog

0.8 (2009-09-17)

  • Remove the CodePage, since CodeView have been removed from grokcore.view. [sylvain]

0.7 (2009-09-15)

  • Add a CodePage to be compatible with the last version of grokcore.view (higher than 1.9). This breaks compatibility with previous release. You need to change any Page using a render method to a CodePage. [sylvain]

  • The content property on a Page is no longer a property, but a method as it’s hidding exceptions. You might need to update your code to reflect that change as well. [sylvain]

  • Fix MANIFEST.in. [sylvain]

0.6 (2009-09-14)

  • switch the arguments order in calling the layout [cklinger, sylvain]

  • add the CHANGES.txt [cklinger]

0.5 (2009-07-24)

  • remove the grok dependency [cklinger souheil]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

megrok.layout-0.8.tar.gz (10.3 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page