[Checkins] SVN: grok/branches/ksmith_mcweekly-viewlets/src/grok/ make viewletmanager behave more like grok.View, addition of viewlets to the standard TAL namespaces

Kevin Smith kevin at mcweekly.com
Sat Apr 28 20:02:25 EDT 2007


Log message for revision 74887:
  make viewletmanager behave more like grok.View, addition of viewlets to the standard TAL namespaces

Changed:
  U   grok/branches/ksmith_mcweekly-viewlets/src/grok/components.py
  U   grok/branches/ksmith_mcweekly-viewlets/src/grok/meta.py

-=-
Modified: grok/branches/ksmith_mcweekly-viewlets/src/grok/components.py
===================================================================
--- grok/branches/ksmith_mcweekly-viewlets/src/grok/components.py	2007-04-28 23:14:57 UTC (rev 74886)
+++ grok/branches/ksmith_mcweekly-viewlets/src/grok/components.py	2007-04-29 00:02:25 UTC (rev 74887)
@@ -518,6 +518,61 @@
 class ViewletManager(ViewletManagerBase):
     template = None
 
+    def __init__(self, context, request, view):
+        super(ViewletManager, self).__init__(context, request, view)
+        self.static = component.queryAdapter(
+            self.request,
+            interface.Interface,
+            name=self.module_info.package_dotted_name
+            )
+        
+
+    def render(self):
+        """See zope.contentprovider.interfaces.IContentProvider"""
+        # Now render the view
+        if self.template:
+            #return self.template(viewlets=self.viewlets)
+            return self._render_template()
+        else:
+            return u'\n'.join([viewlet.render() for viewlet in self.viewlets])
+                                                
+        
+    @property
+    def response(self):
+        return self.request.response
+
+    def _render_template(self):
+        namespace = self.template.pt_getContext()
+        namespace['request'] = self.request
+        namespace['view'] = self
+        namespace['viewlets'] = self.viewlets
+        namespace['static'] = self.static
+        namespace['context'] = self.context
+        # XXX need to check whether we really want to put None here if missing
+        return self.template.pt_render(namespace)
+
+    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 OrderedViewletManager(ViewletManager):
     def sort(self, viewlets):

Modified: grok/branches/ksmith_mcweekly-viewlets/src/grok/meta.py
===================================================================
--- grok/branches/ksmith_mcweekly-viewlets/src/grok/meta.py	2007-04-28 23:14:57 UTC (rev 74886)
+++ grok/branches/ksmith_mcweekly-viewlets/src/grok/meta.py	2007-04-29 00:02:25 UTC (rev 74887)
@@ -599,6 +599,8 @@
 
     def register(self, context, name, factory, module_info, templates):
 
+        factory.module_info = module_info # to make /static available
+
         name = grok.util.class_annotation(factory, 'grok.name', factory.__name__.lower())
         view_layer = util.class_annotation(factory, 'grok.layer',
                                                     None) or module_info.getAnnotation('grok.layer',



More information about the Checkins mailing list