[Checkins] SVN: plone.z3cform/branches/infrae-grok/plone/z3cform/components.py - Let the form template be a grok template.

Sylvain Viollon sylvain at infrae.com
Tue Aug 5 05:51:32 EDT 2008


Log message for revision 89365:
  
  - Let the form template be a grok template.
  
  

Changed:
  U   plone.z3cform/branches/infrae-grok/plone/z3cform/components.py

-=-
Modified: plone.z3cform/branches/infrae-grok/plone/z3cform/components.py
===================================================================
--- plone.z3cform/branches/infrae-grok/plone/z3cform/components.py	2008-08-05 09:25:53 UTC (rev 89364)
+++ plone.z3cform/branches/infrae-grok/plone/z3cform/components.py	2008-08-05 09:51:31 UTC (rev 89365)
@@ -1,10 +1,13 @@
 
 from zope import interface
+from zope import component
 from zope.component.interfaces import IFactory
 from zope.publisher.publish import mapply
+from zope.pagetemplate.interfaces import IPageTemplate
 
 import martian
 from grokcore import view
+from grokcore.view.interfaces import ITemplate as IGrokTemplate
 from z3c.form import form, field
 
 from plone.z3cform import z2
@@ -32,6 +35,9 @@
     def __init__(self, context, request):
         super(GrokForm, self).__init__(context, request)
         self.__name__ = self.__view_name__ # For Zope2 publisher
+        self.static = component.queryAdapter(
+            self.request, interface.Interface,
+            name = self.module_info.package_dotted_name)
 
     def update(self):
         """Subclasses can override this method just like on regular
@@ -47,14 +53,24 @@
         """
         super(GrokForm, self).update()
 
+    def _render_template(self):
+        assert not (self.template is None)
+        if IGrokTemplate.providedBy(self.template):
+            return super(GrokForm, self)._render_template()
+        return self.template()
 
     def render(self):
         """People don't have to define a render method here, and we
         have to use the one provided by z3c.form (people can provide
-        render method in grok).
+        render method in grok), but we have to call the template
+        correctly.
         """
-        return super(GrokForm, self).render()
 
+        if self.template is None:
+            self.template = component.getMultiAdapter((self, self.request), IPageTemplate)
+        return self._render_template()
+
+
     render.base_method = True   # Mark the method to prevent people to
                                 # override it.
 



More information about the Checkins mailing list