[Zope-dev] zpt nesting/inheritence in views
Chris Withers
chris at simplistix.co.uk
Fri Apr 17 21:36:24 EDT 2009
Hey All,
Thought I'd share this and see if anyone had any better ideas...
So, I have a set of views that subclass each other, nothing out of the
ordinary there. However, I also want the zpts used by the views to
"subclass" each other, such that a subclassing view can use its parent's
macro(s) and provide the same to be used further downstream.
This is the only solution I can think of:
from Products.Five.browser import BrowserView
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class Base1(BrowserView):
template = ViewPageTemplateFile('html/template1.html')
class Base2(Base1):
template = ViewPageTemplateFile('html/template2.html')
parent = Base1
class Base3(Base2):
template = ViewPageTemplateFile('html/template3.html')
parent = Base2
class Concrete(Base3):
def __call__(self):
return self.template(self)
template1.html:
<metal:x define-macro="main">
<p>Template1</p>
<metal:x define-slot="slot"/>
</metal:x>
template2.html:
<tal:x define="parent nocall:view">
<metal:x define-macro="main"
tal:define="parent nocall:parent/parent">
<metal:x use-macro="parent/template/macros/main">
<metal:x fill-slot="slot">
<p>Template2</p>
<metal:x define-slot="slot"/>
</metal:x>
</metal:x>
</metal:x>
</tal:x>
template3.html:
<tal:x define="parent nocall:view">
<tal:x define="parent nocall:parent/parent">
<metal:x use-macro="parent/template/macros/main">
<metal:x fill-slot="slot">
<p>Template3</p>
</metal:x>
</metal:x>
</tal:x>
</tal:x>
Can anyone think of a nicer way that doesn't involve the 'parent'
attribute on the view classes and has (preferably much) nicer code in
the zpts?
cheers,
Chris
--
Simplistix - Content Management, Zope & Python Consulting
- http://www.simplistix.co.uk
More information about the Zope-Dev
mailing list