[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