[Checkins] SVN: z3c.pagelet/trunk/ Don't bother rendering a pagelet when request is a redirection.

Dan Korostelev nadako at gmail.com
Thu Feb 26 10:49:41 EST 2009


Log message for revision 97312:
  Don't bother rendering a pagelet when request is a redirection.

Changed:
  U   z3c.pagelet/trunk/CHANGES.txt
  U   z3c.pagelet/trunk/src/z3c/pagelet/README.txt
  U   z3c.pagelet/trunk/src/z3c/pagelet/browser.py

-=-
Modified: z3c.pagelet/trunk/CHANGES.txt
===================================================================
--- z3c.pagelet/trunk/CHANGES.txt	2009-02-26 15:16:00 UTC (rev 97311)
+++ z3c.pagelet/trunk/CHANGES.txt	2009-02-26 15:49:41 UTC (rev 97312)
@@ -11,6 +11,9 @@
   using (view, request, context) discriminator. This is compatible with
   context-specific templates introduced in z3c.template 1.2.0. 
 
+* Don't do rendering in pagelet's __call__ method when request is a redirection.
+
+
 1.0.2 (2008-01-21)
 ------------------
 

Modified: z3c.pagelet/trunk/src/z3c/pagelet/README.txt
===================================================================
--- z3c.pagelet/trunk/src/z3c/pagelet/README.txt	2009-02-26 15:16:00 UTC (rev 97311)
+++ z3c.pagelet/trunk/src/z3c/pagelet/README.txt	2009-02-26 15:49:41 UTC (rev 97312)
@@ -129,6 +129,32 @@
   </div>
 
 
+Redirection
+-----------
+
+The pagelet doesn't bother rendering itself and its layout when request is a
+redirection as the rendering doesn't make any sense with browser requests in
+that case. Let's create a view that does a redirection in its update method.
+
+  >>> class RedirectingView(MyView):
+  ...     def update(self):
+  ...         self.request.response.redirect('http://www.google.com/')
+
+It will return an empty string when called as a browser page.
+
+  >>> redirectRequest = TestRequest()
+  >>> redirectView = RedirectingView(root, redirectRequest)
+  >>> redirectView() == ''
+  True
+
+However, the ``render`` method will render pagelet's template as usual:
+
+  >>> print redirectView.render()
+  <div class="content">
+    my template content
+  </div>
+  
+
 PageletRenderer
 ---------------
 

Modified: z3c.pagelet/trunk/src/z3c/pagelet/browser.py
===================================================================
--- z3c.pagelet/trunk/src/z3c/pagelet/browser.py	2009-02-26 15:16:00 UTC (rev 97311)
+++ z3c.pagelet/trunk/src/z3c/pagelet/browser.py	2009-02-26 15:49:41 UTC (rev 97312)
@@ -25,6 +25,7 @@
 from z3c.template.interfaces import ILayoutTemplate, IContentTemplate
 from z3c.pagelet import interfaces
 
+REDIRECT_STATUS_CODES = (301, 302, 303)
 
 # default pagelet base implementation
 class BrowserPagelet(browser.BrowserPage):
@@ -52,6 +53,11 @@
     def __call__(self):
         """Calls update and returns the layout template which calls render."""
         self.update()
+        
+        if self.request.response.getStatus() in REDIRECT_STATUS_CODES:
+            # don't bother rendering when redirecting
+            return ''
+        
         if self.layout is None:
             layout = zope.component.queryMultiAdapter(
                 (self, self.request, self.context), ILayoutTemplate)



More information about the Checkins mailing list