[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