[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

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