Index: defaulttags.py
===================================================================
--- defaulttags.py	(revision 13295)
+++ defaulttags.py	(working copy)
@@ -53,9 +53,10 @@
             return u''
 
 class CycleNode(Node):
-    def __init__(self, cyclevars, variable_name=None):
+    def __init__(self, cyclevars, variable_name=None, silent=None):
         self.cyclevars = cyclevars
         self.variable_name = variable_name
+        self.silent = silent
 
     def render(self, context):
         if self not in context.render_context:
@@ -64,6 +65,8 @@
         value = cycle_iter.next().resolve(context)
         if self.variable_name:
             context[self.variable_name] = value
+            if self.silent is not None and self.silent.resolve(context):
+                return u''
         return value
 
 class DebugNode(Node):
@@ -475,6 +478,12 @@
     You can use any number of values, separated by spaces. Commas can also
     be used to separate values; if a comma is used, the cycle values are
     interpreted as literal strings.
+    
+    You can now also pass a 'silent' flag (a var which will be evaluated as
+    boolean) to supress the return string when you are using the 'as' form, eg:
+    
+        {% cycle 'row1' 'row2' 'row3' as rowcolors 0 %} (no output)
+    
     """
 
     # Note: This returns the exact same node on each {% cycle name %} call;
@@ -505,11 +514,19 @@
         if not name in parser._namedCycleNodes:
             raise TemplateSyntaxError("Named cycle '%s' does not exist" % name)
         return parser._namedCycleNodes[name]
-
-    if len(args) > 4 and args[-2] == 'as':
-        name = args[-1]
-        values = [parser.compile_filter(arg) for arg in args[1:-2]]
-        node = CycleNode(values, name)
+    
+    try:
+        as_index = args.index('as')
+    except ValueError:
+        as_index = None
+    
+    if len(args) > 4 and as_index is not None:
+        name = args[as_index+1]
+        values = [parser.compile_filter(arg) for arg in args[1:as_index]]
+        if len(args) > as_index + 2:
+            node = CycleNode(values, name, parser.compile_filter(args[as_index+2]))
+        else:
+            node = CycleNode(values, name)
         if not hasattr(parser, '_namedCycleNodes'):
             parser._namedCycleNodes = {}
         parser._namedCycleNodes[name] = node
