[Zope3-Users] view vs page confused

Marius Gedminas mgedmin at b4net.lt
Wed Jan 24 17:49:40 EST 2007


On Wed, Jan 24, 2007 at 08:31:52PM +0100, Dominique Lederer wrote:
> can someone explain me please when to use browser:view and when browser:page?

As far as I understand, the intended use of <browser:page> is to define
views that are accessible to browsers by using URLs.

The intended use of <browser:view> is to define helper views that are
accessible to page templates in TALES expressions like
tal:attributes="href context/@@absolute_url".

I might be wrong.

> and when would i inherit a View Class from zope.publisher.BrowserView
> and when from zope.publisher.BrowserPage, and why do i need them when
> i could just inherit from object without any errors?

A browser page must implement IBrowserPublisher if you want it to be
accessible from the outside.  BrowserPage does that.  The <browser:page>
also does that, but in a different way.  The directive does deep magic
-- it constructs a new class on the fly that implements
IBrowserPublisher and inherits from the view class you've specified.  It
can also provide a 'index' attribute and a default implementation of
__call__.

BrowserView only gives you a useful __init__.  If you inherit directly
from object, you'll have to define __init__ by yourself.

Looking at the code I see that BrowserView also gives you a __parent__
property that is used by the standard Zope 3 security policy.  I do not
think it is all that important, as usually views in Zope3-land are not
security proxied.

Magic is going out of fashion in Zope3-land.  In my personal opinion
the best practice for Zope 3 views is to follow this pattern:

    class MyView(BrowserPage):
        adapts(ISomeContext, IBrowserRequest)

        template = ViewPageTemplateFile('...')

        def __call__(self):
            # do form processing, if any
            return self.template()

and then register it with <browser:page>.

> and what means the @@ or ++view++ if i can access a view(page?) without that?

Yes.  The @@ (which is a shorter spelling of ++view++) is a way to
resolve ambiguities when you have both a view named 'foo.html' and an
object in a container also named 'foo.html'.  When there are no
ambiguities, the @@ is optional.

> i am really confused :)
> please help.

I hope I've made some things clearer.

I also hope that the big Zope 3 gurus will correct all the mistakes I've
made in the above.  I'm sure there must be at least one or two.

Marius Gedminas
-- 
No sane person should use frame buffers if they have the choice.
        -- Linus Torvalds on lkml
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zope3-users/attachments/20070125/97ab2e2a/attachment.bin


More information about the Zope3-users mailing list