[Checkins] SVN: z3c.template/trunk/src/z3c/template/ Added
getPageTemplate and getLayoutTemplate
Roger Ineichen
roger at projekt01.ch
Sat May 12 22:50:54 EDT 2007
Log message for revision 75711:
Added getPageTemplate and getLayoutTemplate
Added unit tests for this two methods
Changed:
U z3c.template/trunk/src/z3c/template/README.txt
U z3c.template/trunk/src/z3c/template/template.py
-=-
Modified: z3c.template/trunk/src/z3c/template/README.txt
===================================================================
--- z3c.template/trunk/src/z3c/template/README.txt 2007-05-12 17:00:49 UTC (rev 75710)
+++ z3c.template/trunk/src/z3c/template/README.txt 2007-05-13 02:50:53 UTC (rev 75711)
@@ -360,7 +360,7 @@
----------------------------
And for the simplest possible use we provide a hook for call registered
-templates. Such page templates can get called with the getViewTemplate method
+templates. Such page templates can get called with the getPageTemplate method
and return a registered bound ViewTemplate a la ViewPageTemplateFile or
NamedTemplate.
@@ -368,13 +368,13 @@
system with all existing implementations such as `zope.formlib` and
`zope.viewlet`.
- >>> from z3c.template.template import getViewTemplate
+ >>> from z3c.template.template import getPageTemplate
>>> class IUseOfViewTemplate(zope.interface.Interface):
... pass
>>> class UseOfViewTemplate(object):
... zope.interface.implements(IUseOfViewTemplate)
...
- ... template = getViewTemplate()
+ ... template = getPageTemplate()
...
... def __init__(self, context, request):
... self.context = context
@@ -406,6 +406,7 @@
Templates can also get registered on different interfaces then IPageTemplate
or ILayoutTemplate.
+ >>> from z3c.template.template import getViewTemplate
>>> class IMyTemplate(zope.interface.Interface):
... """My custom tempalte marker."""
@@ -438,7 +439,7 @@
template combined with a custom template marker interface.
>>> class IMyNamedTemplate(zope.interface.Interface):
- ... """My custom tempalte marker."""
+ ... """My custom template marker."""
>>> factory = TemplateFactory(contentTemplate, 'text/html')
>>> component.provideAdapter(factory,
@@ -463,6 +464,45 @@
<div>demo content</div>
+Use case ``named layout template``
+----------------------------------
+
+We can also register a new layout template by name and use it in a view:
+
+ >>> from z3c.template.template import getLayoutTemplate
+
+ >>> editLayout = os.path.join(temp_dir, 'editLayout.pt')
+ >>> open(editLayout, 'w').write('''
+ ... <div>Edit layout</div>
+ ... <div tal:content="view/render">content</div>
+ ... ''')
+ >>> factory = TemplateFactory(editLayout, 'text/html')
+ >>> component.provideAdapter(factory,
+ ... (zope.interface.Interface, IDefaultBrowserLayer),
+ ... interfaces.ILayoutTemplate, name='edit')
+
+Now define a view using such a custom named template registration:
+
+ >>> class MyEditView(BrowserPage):
+ ...
+ ... layout = getLayoutTemplate('edit')
+ ...
+ ... def render(self):
+ ... return u'edit content'
+ ...
+ ... def __call__(self):
+ ... if self.layout is None:
+ ... layout = zope.component.getMultiAdapter((self, self.request),
+ ... interfaces.ILayoutTemplate)
+ ... return layout(self)
+ ... return self.layout()
+
+ >>> myEditView = MyEditView(root, request)
+ >>> print myEditView()
+ <div>Edit layout</div>
+ <div>edit content</div>
+
+
Cleanup
-------
Modified: z3c.template/trunk/src/z3c/template/template.py
===================================================================
--- z3c.template/trunk/src/z3c/template/template.py 2007-05-12 17:00:49 UTC (rev 75710)
+++ z3c.template/trunk/src/z3c/template/template.py 2007-05-13 02:50:53 UTC (rev 75711)
@@ -19,6 +19,7 @@
from zope.pagetemplate.interfaces import IPageTemplate
from zope.app.pagetemplate import ViewPageTemplateFile
+from z3c.template import interfaces
from z3c.template.macro import Macro
@@ -74,3 +75,21 @@
return BoundViewTemplate(self, instance)
getViewTemplate = ViewTemplate
+
+
+class GetPageTemplate(ViewTemplate):
+
+ def __init__(self, name=u''):
+ self.provides = IPageTemplate
+ self.name = name
+
+getPageTemplate = GetPageTemplate
+
+
+class GetLayoutTemplate(ViewTemplate):
+
+ def __init__(self, name=u''):
+ self.provides = interfaces.ILayoutTemplate
+ self.name = name
+
+getLayoutTemplate = GetLayoutTemplate
More information about the Checkins
mailing list