[Checkins] SVN: z3c.pt/trunk/ View templates now support argument-passing for alternative context and request.

Malthe Borch mborch at gmail.com
Sun Dec 14 13:17:07 EST 2008


Log message for revision 94062:
  View templates now support argument-passing for alternative context and request.

Changed:
  U   z3c.pt/trunk/CHANGES.txt
  U   z3c.pt/trunk/src/z3c/pt/README.txt
  U   z3c.pt/trunk/src/z3c/pt/pagetemplate.py

-=-
Modified: z3c.pt/trunk/CHANGES.txt
===================================================================
--- z3c.pt/trunk/CHANGES.txt	2008-12-14 18:16:31 UTC (rev 94061)
+++ z3c.pt/trunk/CHANGES.txt	2008-12-14 18:17:06 UTC (rev 94062)
@@ -1,9 +1,12 @@
 Changelog
 ---------
 
-Head
-~~~~
+In next release
 
+- View templates now support argument-passing for alternative context
+  and request (for compatibility with
+  ``zope.app.pagetemplate``). [malthe]
+
 - Switched off the $-interpolation feature per default; It may be activated
   on a per-template basis using ``meta:interpolation='true'``. [seletz]
 

Modified: z3c.pt/trunk/src/z3c/pt/README.txt
===================================================================
--- z3c.pt/trunk/src/z3c/pt/README.txt	2008-12-14 18:16:31 UTC (rev 94061)
+++ z3c.pt/trunk/src/z3c/pt/README.txt	2008-12-14 18:17:06 UTC (rev 94062)
@@ -103,6 +103,17 @@
     <span>test</span>
   </div>
 
+For compatibility reasons, view templates may be called with an
+alternative context and request.
+
+  >>> print template(view, u"alt_context", "alt_request", test=u'test')
+  <div xmlns="http://www.w3.org/1999/xhtml">
+    <span>view</span>
+    <span>alt_context</span>
+    <span>alt_request</span>
+    <span>test</span>
+  </div>
+
 Dollar-Interpolation
 --------------------
 

Modified: z3c.pt/trunk/src/z3c/pt/pagetemplate.py
===================================================================
--- z3c.pt/trunk/src/z3c/pt/pagetemplate.py	2008-12-14 18:16:31 UTC (rev 94061)
+++ z3c.pt/trunk/src/z3c/pt/pagetemplate.py	2008-12-14 18:17:06 UTC (rev 94062)
@@ -1,15 +1,14 @@
 import os
 import sys
 
-import chameleon.zpt.template
+from zope import i18n
+from chameleon.zpt import template
 
-import z3c.pt.language
+import language
 
-from zope import i18n
+class BaseTemplate(template.PageTemplate):
+    default_parser = language.Parser()
 
-class BaseTemplate(chameleon.zpt.template.PageTemplate):
-    default_parser = z3c.pt.language.Parser()
-    
     def bind(self, ob, request=None, macro=None, global_scope=True):
         def render(target_language=None, **kwargs):
             context = self._pt_get_context(ob, request, kwargs)
@@ -20,9 +19,9 @@
                         request or context.get('request'))
                 except:
                     target_language = None
-                    
+
             context['target_language'] = target_language
-            
+
             if macro is None:
                 return self.render(**context)
             else:
@@ -42,7 +41,7 @@
             template=self,
             nothing=None)
 
-class BaseTemplateFile(BaseTemplate, chameleon.zpt.template.PageTemplateFile):
+class BaseTemplateFile(BaseTemplate, template.PageTemplateFile):
     """If ``filename`` is a relative path, the module path of the
     class where the instance is used to get an absolute path."""
 
@@ -58,7 +57,7 @@
                 if package_name != self.__module__:	 
                     break	 
  	 
-            module = sys.modules[package_name]	 
+            module = sys.modules[package_name]
             try:	 
                 path = module.__path__[0]	 
             except AttributeError:	 
@@ -67,7 +66,7 @@
  	 
             filename = path + os.sep + filename
 
-        chameleon.zpt.template.PageTemplateFile.__init__(
+        template.PageTemplateFile.__init__(
             self, filename, **kwargs)
 
 class PageTemplate(BaseTemplate):
@@ -100,12 +99,18 @@
     def _pt_get_context(self, view, request, kwargs):
         return dict(
             view=view,
-            context=view.context,
-            request=request or view.request,
+            context=kwargs.get('context', view.context),
+            request=request or kwargs.get('request', view.request),
             template=self,
             options=kwargs,
             nothing=None)
 
+    def __call__(self, _ob=None, context=None, request=None, **kwargs):
+        kwargs.setdefault('context', context)
+        kwargs.setdefault('request', request)
+        return super(ViewPageTemplate, self).__call__(
+            _ob=_ob, **kwargs)
+
 class ViewPageTemplateFile(ViewPageTemplate, PageTemplateFile):
     """If ``filename`` is a relative path, the module path of the
     class where the instance is used to get an absolute path."""



More information about the Checkins mailing list