[Zope-Checkins]
SVN: Products.Five/branches/philikon-local-components/component/
Take the original view class for the 'view' object. In order
to find it, we
Philipp von Weitershausen
philikon at philikon.de
Wed Mar 1 18:53:25 EST 2006
Log message for revision 65693:
Take the original view class for the 'view' object. In order to find it, we
look for it at the global level (which might not be enough in the future). For
this to work we also need to remember its view name.
Changed:
U Products.Five/branches/philikon-local-components/component/browser.py
U Products.Five/branches/philikon-local-components/component/component.txt
-=-
Modified: Products.Five/branches/philikon-local-components/component/browser.py
===================================================================
--- Products.Five/branches/philikon-local-components/component/browser.py 2006-03-01 23:27:54 UTC (rev 65692)
+++ Products.Five/branches/philikon-local-components/component/browser.py 2006-03-01 23:53:24 UTC (rev 65693)
@@ -22,8 +22,8 @@
from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate
from Products.PageTemplates.Expressions import SecureModuleImporter
-from zope.interface import providedBy
-from zope.component import getMultiAdapter
+from zope.interface import Interface, providedBy
+from zope.component import getMultiAdapter, getGlobalSiteManager
from zope.component.globalregistry import base
from zope.component.persistentregistry import PersistentComponents
from zope.publisher.interfaces.browser import IBrowserRequest
@@ -104,7 +104,8 @@
if reg.name == viewname:
break
- components.registerAdapter(viewFactory(viewzpt), required=reg.required,
+ view_factory = viewFactory(viewzpt, viewname)
+ components.registerAdapter(view_factory, required=reg.required,
provided=reg.provided, name=viewname) #XXX info?
return viewzpt
@@ -113,22 +114,30 @@
#TODO use @@absolute_url view
self.request.RESPONSE.redirect(viewzpt.absolute_url() + "/manage_workspace")
-def viewFactory(viewzpt):
+def viewFactory(viewzpt, viewname):
def view(context, request):
- return ZPTView(viewzpt, context, request)
+ return ZPTView(viewzpt, viewname, context, request)
return view
class ZPTView(BrowserView):
- def __init__(self, viewzpt, context, request):
+ def __init__(self, viewzpt, viewname, context, request):
self.viewzpt = viewzpt
+ self.viewname = viewname
self.context = context
self.request = request
+ def _findViewClass(self):
+ gsm = getGlobalSiteManager()
+ view = gsm.queryMultiAdapter((self.context, self.request), Interface,
+ name=self.viewname)
+ if view is not None:
+ return view
+ return self
+
def _zptNamespace(self):
root = aq_acquire(self.context, 'getPhysicalRoot')()
here = aq_inner(self.context)
- view = self #XXX get the "real" view class
return {
'template': self.viewzpt,
'nothing': None,
@@ -136,7 +145,7 @@
'here': here,
'context': here,
'container': here,
- 'view': view,
+ 'view': self._findViewClass(),
'root': root,
'modules': SecureModuleImporter,
}
Modified: Products.Five/branches/philikon-local-components/component/component.txt
===================================================================
--- Products.Five/branches/philikon-local-components/component/component.txt 2006-03-01 23:27:54 UTC (rev 65692)
+++ Products.Five/branches/philikon-local-components/component/component.txt 2006-03-01 23:53:24 UTC (rev 65693)
@@ -126,6 +126,7 @@
... view: <tal:var replace="structure nocall:view" />
... modules: <tal:var replace="structure modules" />
... options: <tal:var replace="structure options" />
+ ... nothing: <tal:var replace="structure nothing" />
... """, content_type=None)
In order to be able to look up the customized view now, we need to
@@ -145,9 +146,10 @@
root: <Application at >
template: <ZopePageTemplate at customizetemplate.html>
request: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>
- view: <Products.Five.component.browser.ZPTView object at ...>
+ view: <Products.Five.metaclass.SimpleViewClass from .../Five/component/customizetemplate.pt object at ...>
modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter instance at ...>
options: {'args': ()}
+ nothing:
<BLANKLINE>
Clean up:
More information about the Zope-Checkins
mailing list