[Checkins] SVN: five.pt/trunk/src/five/pt/ The container should be the Acquisition.aq_parent.

Ross Patterson me at rpatterson.net
Sat Oct 23 19:13:52 EDT 2010


Log message for revision 117827:
  The container should be the Acquisition.aq_parent.
  
  Many templates expect this.  Without Chameleon, a
  Products.CMFCore.FSPageTemplate inherits from
  Products.PageTemplates whose classes which set the container using
  self.aq_inner.aq_parent or self._getContainer() which in turn comes
  from Shared.DC.Scripts.Bindings.Bindings.  With cmf.pt, the
  FSPageTemplate no longer inherits from Products.PageTemplates or the
  mro is changed such that this no longer takes effect.
  
  What's more confusing is that it seems like
  Products.Five.browser.pagetemplate should be doing this anyways, since
  in a Zope2 app, container really should be the aq_parent of the
  context.  So I'm not entirely sure what the right answer is but I know
  this fixes the CMFPlacefulWorkflow placeful_workflow_configuration
  redirect loop I encountered and there's no place in cmf.pt to affect
  the locals definition of "container" so I'm doing it here.
  

Changed:
  U   five.pt/trunk/src/five/pt/pagetemplate.py
  U   five.pt/trunk/src/five/pt/tests/locals.pt
  A   five.pt/trunk/src/five/pt/tests/locals_base.pt
  U   five.pt/trunk/src/five/pt/tests/test_viewpagetemplatefile.py

-=-
Modified: five.pt/trunk/src/five/pt/pagetemplate.py
===================================================================
--- five.pt/trunk/src/five/pt/pagetemplate.py	2010-10-23 20:31:56 UTC (rev 117826)
+++ five.pt/trunk/src/five/pt/pagetemplate.py	2010-10-23 23:13:52 UTC (rev 117827)
@@ -60,7 +60,7 @@
                 request=request or aq_get(instance, 'REQUEST', None),
                 template=self,
                 here=context,
-                container=context,
+                container=aq_parent(aq_inner(context)),
                 nothing=None,
                 same_type=same_type,
                 test=test,
@@ -108,7 +108,7 @@
                 view=view,
                 template=self,
                 here=context,
-                container=context,
+                container=aq_parent(aq_inner(context)),
                 nothing=None,
                 path=pagetemplate.evaluate_path,
                 exists=pagetemplate.evaluate_exists,

Modified: five.pt/trunk/src/five/pt/tests/locals.pt
===================================================================
--- five.pt/trunk/src/five/pt/tests/locals.pt	2010-10-23 20:31:56 UTC (rev 117826)
+++ five.pt/trunk/src/five/pt/tests/locals.pt	2010-10-23 23:13:52 UTC (rev 117827)
@@ -2,7 +2,7 @@
      xmlns:tal="http://xml.zope.org/namespaces/tal">
     <div tal:replace="string:view:${view/available}" />
     <div tal:replace="python:'here==context:'+str(here==context)" />
-    <div tal:replace="python:'here==container:'+str(here==container)" />
+    <div tal:replace="python:'parent==container:'+str(here.aq_parent==container)" />
     <div tal:replace="string:root:${root/getPhysicalPath}" />
     <div tal:replace="string:nothing:${nothing}" />
     <div tal:define="cgi python:modules['cgi']">

Added: five.pt/trunk/src/five/pt/tests/locals_base.pt
===================================================================
--- five.pt/trunk/src/five/pt/tests/locals_base.pt	                        (rev 0)
+++ five.pt/trunk/src/five/pt/tests/locals_base.pt	2010-10-23 23:13:52 UTC (rev 117827)
@@ -0,0 +1,6 @@
+<div xmlns="http://www.w3.org/1999/xhtml"
+     xmlns:tal="http://xml.zope.org/namespaces/tal">
+    <div tal:replace="python:'here==context:'+str(here==context)" />
+    <div tal:replace="python:'container==None:'+str(None==container)" />
+    <div tal:replace="string:nothing:${nothing}" />
+</div>

Modified: five.pt/trunk/src/five/pt/tests/test_viewpagetemplatefile.py
===================================================================
--- five.pt/trunk/src/five/pt/tests/test_viewpagetemplatefile.py	2010-10-23 20:31:56 UTC (rev 117826)
+++ five.pt/trunk/src/five/pt/tests/test_viewpagetemplatefile.py	2010-10-23 23:13:52 UTC (rev 117827)
@@ -4,6 +4,7 @@
 from Testing.ZopeTestCase import ZopeTestCase
 
 from five.pt.pagetemplate import ViewPageTemplateFile
+from five.pt.pagetemplate import BaseTemplateFile
 
 
 class SimpleView(BrowserView):
@@ -20,6 +21,11 @@
     index = ViewPageTemplateFile('locals.pt')
 
 
+class LocalsBaseView(BrowserView):
+
+    index = BaseTemplateFile('locals_base.pt')
+
+
 class OptionsView(BrowserView):
     index = ViewPageTemplateFile('options.pt')
 
@@ -50,11 +56,18 @@
         #self.failUnless('Folder at test_folder_1_' in result)
         #self.failUnless('http://nohost' in result)
         self.failUnless('here==context:True' in result)
-        self.failUnless('here==container:True' in result)
+        self.failUnless('parent==container:True' in result)
         self.failUnless("root:(\'\',)" in result)
         self.failUnless("nothing:None" in result)
         self.failUnless("modules:&lt;foo&gt;" in result)
 
+    def test_locals_base(self):
+        view = LocalsBaseView(self.folder, self.folder.REQUEST)
+        result = view.index()
+        self.failUnless('here==context:True' in result)
+        self.failUnless('container==None:True' in result)
+        self.failUnless("nothing:None" in result)
+
     def test_options(self):
         view = OptionsView(self.folder, self.folder.REQUEST)
         options = dict(



More information about the checkins mailing list