[Zope-Checkins] SVN: Products.Five/branches/philikon-local-components/component/ Use the template's original file name for the new object. This is to avoid

Philipp von Weitershausen philikon at philikon.de
Wed Mar 1 19:59:09 EST 2006


Log message for revision 65708:
  Use the template's original file name for the new object.  This is to avoid
  potential clashes (currently, Five is a bit stupid about view vs. object
  look-up).
  

Changed:
  U   Products.Five/branches/philikon-local-components/component/browser.py
  U   Products.Five/branches/philikon-local-components/component/component.txt
  U   Products.Five/branches/philikon-local-components/component/customizetemplate.pt

-=-
Modified: Products.Five/branches/philikon-local-components/component/browser.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/browser.py	2006-03-02 00:35:40 UTC (rev 65707)
+++ Products.Five/branches/philikon-local-components/component/browser.py	2006-03-02 00:59:09 UTC (rev 65708)
@@ -15,6 +15,8 @@
 
 $Id$
 """
+import os.path
+
 from Acquisition import aq_parent, aq_acquire, aq_inner
 from Products.Five.browser import BrowserView
 from Products.Five.component import enableSite, disableSite
@@ -78,14 +80,12 @@
                    factory.__name__.startswith('SimpleViewClass'):
                 yield reg
 
-    def templateSource(self, viewname):
+    def templateFromViewname(self, viewname):
         view = getMultiAdapter((self.context, self.request),
                                name=viewname)
-        return view.index.read()
+        return view.index
 
     def doCustomizeTemplate(self, viewname):
-        src = self.templateSource(viewname)
-
         # find the nearest site
         site = self.context
         while site is not None and not IObjectManagerSite.providedBy(site):
@@ -93,9 +93,14 @@
         if site is None:
             raise TypeError("No site found")  #TODO find right exception
 
-        id = str(viewname)  #XXX this could barf
-        viewzpt = ZopePageTemplate(id, src)
-        site._setObject(id, viewzpt) #XXXthere could be a naming conflict
+        # we're using the original filename of the template, not the
+        # view name to avoid potential conflicts and/or confusion in
+        # URLs
+        template = self.templateFromViewname(viewname)
+        zpt_id = os.path.basename(template.filename)
+
+        viewzpt = ZopePageTemplate(zpt_id, template.read())
+        site._setObject(zpt_id, viewzpt) #XXXthere could be a naming conflict
         components = site.getSiteManager()
 
         # find out the view registration object so we can get at the
@@ -107,12 +112,16 @@
         view_factory = ZPTViewFactory(viewzpt, viewname)
         components.registerAdapter(view_factory, required=reg.required,
                                    provided=reg.provided, name=viewname) #XXX info?
+
+        viewzpt = getattr(site, zpt_id)
         return viewzpt
 
     def customizeTemplate(self, viewname):
         viewzpt = self.doCustomizeTemplate(viewname)
+        viewzpt = aq_inner(viewzpt)
         #TODO use @@absolute_url view
-        self.request.RESPONSE.redirect(viewzpt.absolute_url() + "/manage_workspace")
+        url = viewzpt.absolute_url() + "/manage_workspace"
+        self.request.RESPONSE.redirect(url)
 
 class ZPTViewFactory(object):
 

Modified: Products.Five/branches/philikon-local-components/component/component.txt
===================================================================
--- Products.Five/branches/philikon-local-components/component/component.txt	2006-03-02 00:35:40 UTC (rev 65707)
+++ Products.Five/branches/philikon-local-components/component/component.txt	2006-03-02 00:59:09 UTC (rev 65708)
@@ -88,7 +88,12 @@
   >>> view = zope.component.getMultiAdapter((item, request),
   ...                                       name=u"customizetemplate.html")
   >>> view = view.__of__(item)
-  >>> print view.templateSource(u'customizetemplate.html') #doctest: +ELLIPSIS
+  >>> template = view.templateFromViewname(u'customizetemplate.html')
+  >>> import os.path
+  >>> os.path.basename(template.filename)
+  'customizetemplate.pt'
+
+  >>> print template.read() #doctest: +ELLIPSIS
   <html metal:use-macro="context/@@standard_macros/view"
         i18n:domain="zope">
   ...
@@ -104,7 +109,7 @@
 (perhaps later we'd like to have the option to pick which of the sites
 above us should be targeted)
 
-  >>> zpt = getattr(site, 'customizetemplate.html')
+  >>> zpt = getattr(site, 'customizetemplate.pt')
   >>> print zpt.read() #doctest: +ELLIPSIS
   <html metal:use-macro="context/@@standard_macros/view"
         i18n:domain="zope">
@@ -144,7 +149,7 @@
   context:   <SimpleContent at item>
   container: <SimpleContent at item>
   root:      <Application at >
-  template:  <ZopePageTemplate at customizetemplate.html>
+  template:  <ZopePageTemplate at customizetemplate.pt>
   request:   <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>
   view:      <Products.Five.metaclass.SimpleViewClass from .../Five/component/customizetemplate.pt object at ...>
   modules:   <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance at ...>

Modified: Products.Five/branches/philikon-local-components/component/customizetemplate.pt
===================================================================
--- Products.Five/branches/philikon-local-components/component/customizetemplate.pt	2006-03-02 00:35:40 UTC (rev 65707)
+++ Products.Five/branches/philikon-local-components/component/customizetemplate.pt	2006-03-02 00:59:09 UTC (rev 65708)
@@ -6,7 +6,7 @@
   <p i18n:translate="">This is the source of the
   <code tal:content="request/form/viewname">viewname</code>:</p>
 
-  <pre tal:content="python:view.templateSource(request.form['viewname'])">
+  <pre tal:content="python:view.templateFromViewname(request.form['viewname']).read()">
     template source
   </pre>
 



More information about the Zope-Checkins mailing list