[Grok-dev] should we support a "namespace()" View method

Brandon Craig Rhodes brandon at rhodesmill.org
Thu Oct 11 14:12:05 EDT 2007

Idea: when rendering a View (that lacks a render() method, of course),
the Grok code that hands data to the template should check for whether
the View has a namespace() method.  The rule would be:

 - If a namespace() method exists, it is run, and the object it
   returns is made the root of the template's name space.

 - If no namespace() method exists, then the default is for the
   namespace to be the dictionary:

    { 'context': view.context, 'view': view, 'template': ..., ... }

   and so forth, that contains all the same things we hand ZPT files
   when using Grok today.

This approach would seem to offer easy support for both kinds of
developer: if you want your templates to traverse your raw object
model, just provide an update() method on your View, and go to town on
your "view" and "context" from in your template.  But if you want a
"push" model instead, with all the attractive results that entails,
then write a namespace() method instead of an update() method.

If this is a good idea, then at least two issues have to be decided:

 - Should update() be called if namespace() exists?  It seems to be
   that one would write each View with either an update() or a
   namespace(), but not both, so I am not sure what we should do in
   the presence of both functions.

 - Should namespace() return a dictionary, or a dumb object with
   attributes?  Can we support "pretty" traversal of both kinds of
   data structure?  Having namespace() be a big "return" statement of
   a big dictionary has certain attractions, but not if that means my
   Genshi templates are full of ['xyz'] dictionary attribute
   references instead of simple .xyz attribute references.

Brandon Craig Rhodes   brandon at rhodesmill.org   http://rhodesmill.org/brandon

More information about the Grok-dev mailing list