[Checkins] SVN: grok/branches/jw-viewlets-fix/src/grok/ Make determing what namespaces are to be injected in the template

Jan-Wijbrand Kolman janwijbrand at gmail.com
Fri May 16 11:06:30 EDT 2008


Log message for revision 86796:
  Make determing what namespaces are to be injected in the template
  a responsibilty of the underlying view component.
  
  Inject extra namespaces for viewlets and viewlet managers.

Changed:
  U   grok/branches/jw-viewlets-fix/src/grok/components.py
  U   grok/branches/jw-viewlets-fix/src/grok/ftests/viewlet/viewletmanager_template_templates/cavemanager.pt

-=-
Modified: grok/branches/jw-viewlets-fix/src/grok/components.py
===================================================================
--- grok/branches/jw-viewlets-fix/src/grok/components.py	2008-05-16 15:04:19 UTC (rev 86795)
+++ grok/branches/jw-viewlets-fix/src/grok/components.py	2008-05-16 15:06:29 UTC (rev 86796)
@@ -174,6 +174,14 @@
     def _render_template(self):
         return self.template.render(self)
 
+    def default_namespace(self):
+        namespace = {}
+        namespace['context'] = self.context
+        namespace['request'] = self.request
+        namespace['static'] = self.static
+        namespace['view'] = self
+        return namespace
+
     def namespace(self):
         return {}
 
@@ -333,15 +341,10 @@
         pass
 
     def namespace(self, view):
-        namespace = {}
-        namespace['request'] = view.request
-        namespace['view'] = view
-        namespace['context'] = view.context
-        # XXX need to check whether we really want to put None here if missing
-        namespace['static'] = view.static
+        # By default use the namespaces that are defined as the
+        # default by the view implementation.
+        return view.default_namespace()
 
-        return namespace
-
     def getNamespace(self, view):
         namespace = self.namespace(view)
         namespace.update(view.namespace())
@@ -661,11 +664,14 @@
 
 class ViewletManager(ViewletManagerBase):
     interface.implements(interfaces.IViewletManager)
-    
+
     template = None
 
     def __init__(self, context, request, view):
         super(ViewletManager, self).__init__(context, request, view)
+        self.context = context
+        self.request = request
+        self.view = view
         self.__name__ = self.__view_name__
         self.static = component.queryAdapter(
             self.request,
@@ -673,6 +679,18 @@
             name=self.module_info.package_dotted_name
             )
 
+    def default_namespace(self):
+        namespace = {}
+        namespace['context'] = self.context
+        namespace['request'] = self.request
+        namespace['static'] = self.static
+        namespace['view'] = self.view
+        namespace['viewletmanager'] = self
+        return namespace
+
+    def namespace(self):
+        return {}
+
     def render(self):
         """See zope.contentprovider.interfaces.IContentProvider"""
         # Now render the view
@@ -682,41 +700,17 @@
             viewlets = util.sort_components(self.viewlets)
             return u'\n'.join([viewlet.render() for viewlet in viewlets])
 
-    def namespace(self):
-        return {}
 
-    @property
-    def response(self):
-        return self.request.response
-
-    def url(self, obj=None, name=None):
-        # if the first argument is a string, that's the name. There should
-        # be no second argument
-        if isinstance(obj, basestring):
-            if name is not None:
-                raise TypeError(
-                    'url() takes either obj argument, obj, string arguments, '
-                    'or string argument')
-            name = obj
-            obj = None
-
-        if name is None and obj is None:
-            # create URL to view itself
-            obj = self
-        elif name is not None and obj is None:
-            # create URL to view on context
-            obj = self.context
-        return util.url(self.request, obj, name)
-
-    def redirect(self, url):
-        return self.request.response.redirect(url)
-
 class Viewlet(ViewletBase):
-    """ Batteries included viewlet """
+    """Batteries included viewlet.
+    """
 
-
     def __init__(self, context, request, view, manager):
         super(Viewlet, self).__init__(context, request, view, manager)
+        self.context = context
+        self.request = request
+        self.view = view
+        self.viewletmanager = manager
         self.__name__ = self.__view_name__
         self.static = component.queryAdapter(
             self.request,
@@ -724,34 +718,21 @@
             name=self.module_info.package_dotted_name
             )
 
-    @property
-    def response(self):
-        return self.request.response
+    def default_namespace(self):
+        namespace = {}
+        namespace['context'] = self.context
+        namespace['request'] = self.request
+        namespace['static'] = self.static
+        namespace['view'] = self.view
+        namespace['viewlet'] = self
+        namespace['viewletmanager'] = self.manager
+        return namespace
 
-    def render(self):
-        return self.template.render(self)
-
     def namespace(self):
         return {}
 
-    def url(self, obj=None, name=None):
-        # if the first argument is a string, that's the name. There should
-        # be no second argument
-        if isinstance(obj, basestring):
-            if name is not None:
-                raise TypeError(
-                    'url() takes either obj argument, obj, string arguments, '
-                    'or string argument')
-            name = obj
-            obj = None
-
-        if name is None and obj is None:
-            # create URL to view itself
-            obj = self
-        elif name is not None and obj is None:
-            # create URL to view on context
-            obj = self.context
-        return util.url(self.request, obj, name)
-
     def update(self):
         pass
+
+    def render(self):
+        return self.template.render(self)

Modified: grok/branches/jw-viewlets-fix/src/grok/ftests/viewlet/viewletmanager_template_templates/cavemanager.pt
===================================================================
--- grok/branches/jw-viewlets-fix/src/grok/ftests/viewlet/viewletmanager_template_templates/cavemanager.pt	2008-05-16 15:04:19 UTC (rev 86795)
+++ grok/branches/jw-viewlets-fix/src/grok/ftests/viewlet/viewletmanager_template_templates/cavemanager.pt	2008-05-16 15:06:29 UTC (rev 86796)
@@ -1,3 +1,3 @@
-<ul tal:define="v_dict view/viewlet_dict; v_keys view/viewlet_keys_sorted;">
+<ul tal:define="v_dict viewletmanager/viewlet_dict; v_keys viewletmanager/viewlet_keys_sorted;">
  <li tal:repeat="k v_keys" tal:content="python:v_dict[k].render().strip()" />
 </ul>



More information about the Checkins mailing list