[Grok-dev] RFC: In-class template definition in grok.View

Kevin Smith kevin at mcweekly.com
Fri Apr 27 16:06:09 EDT 2007


Hi List,

Currently grok.View does not support importing pagetemplates for re-use 
or use pagetemplates defined in-class/in-line.

shared.py
template = grok.PageTemplateFile(os.path.join('template.pt'))

app.py
import shared
class MyView(grok.View):
    template = shared.template

This currently raises a "View MyView has no associated template or 
'render' method." As a brittle hack, the following works since if 
self.template is found it is currently called before self.render.

class MyView(grok.View):
    template = shared.template

    def render(self):
        pass

To allow in-class template definition, ViewGrokker  would need to check 
factory.template to be a PageTemplate or PageTemplateFile prior to 
raising a 'no associated template or render method'.

Templates can then stay in-module or event in-class. This technique is 
potentially useful for ajax that tends to break views into lots of 
little pieces, for short throw-away templates or to keep examples brief.

class MyView(grok.View):
    """<html metal:use-macro="context/@@master/page">
         <body metal:fill-slot="body">>
          <li tal:repeat="item context/values">
             <a tal:attributes="href python:view.url(item)" 
tal:content="item/title" />
           </li>
          </body>
         </html>
    """
    template = grok.PageTemplate(__doc__)

Please let me know what you think.

Kevin Smith 






More information about the Grok-dev mailing list