[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