Directives: Flow Control ======================== (flowControl) #for ---- (flowControl.for) The template: :: #for $i in $range(10) $i #slurp #end for The output: :: 0 1 2 3 4 5 6 7 8 9 The generated code: :: for i in range(10): write(filter(i)) # generated from '$i' at line 2, col 1. write(' ') #repeat ------- (flowControl.repeat) The template: :: #repeat 3 My bonnie lies over the ocean #end repeat O, bring back my bonnie to me! The output: :: My bonnie lies over the ocean My bonnie lies over the ocean My bonnie lies over the ocean O, bring back my bonnie to me! (OK, so the second line should be "sea" instead of "ocean".) The generated code: :: for __i0 in range(3): write('My bonnie lies over the ocean\n') write('O, bring back my bonnie to me!\n') Note that a new local variable of the form {\_\_i$num} will be used for each instance of {repeat} in order to permit nesting. #while ------ (flowControl.while) The template: :: #set $alive = True #while $alive I am alive! #set $alive = False #end while The output: :: I am alive! The generated code: :: alive = True while alive: write('I am alive!\n') alive = False #if --- () The template: :: #set $size = 500 #if $size >= 1500 It's big #else if $size < 1500 and $size > 0 It's small #else It's not there #end if The output: :: It's small The generated code: :: size = 500 if size >= 1500: write("It's big\n") elif size < 1500 and size > 0: write("It's small\n") else: write("It's not there\n") #unless ------- (flowControl.unless) The template: :: #set $count = 9 #unless $count + 5 > 15 Count is in range. #end unless The output: :: Count is in range. The generated code: :: count = 9 if not (count + 5 > 15): write('Count is in range.\n') { Note:} There is a bug in Cheetah 0.9.13. It's forgetting the parentheses in the {if} expression, which could lead to it calculating something different than it should. #break and #continue -------------------- (flowControl.break) The template: :: #for $i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow'] #if $i == 10 #continue #end if #if $i == 'Joe' #break #end if $i - #slurp #end for The output: :: 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 11 - 12 - James - The generated code: :: for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 'James', 'Joe', 'Snow']: if i == 10: write('') continue if i == 'Joe': write('') break write(filter(i)) # generated from '$i' at line 8, col 1. write(' - ') #pass ----- (flowControl.pass) The template: :: Let's check the number. #set $size = 500 #if $size >= 1500 It's big #elif $size > 0 #pass #else Invalid entry #end if Done checking the number. The output: :: Let's check the number. Done checking the number. The generated code: :: write("Let's check the number.\n") size = 500 if size >= 1500: write("It's big\n") elif size > 0: pass else: write('Invalid entry\n') write('Done checking the number.\n') #stop ----- (flowControl.stop) The template: :: A cat #if 1 sat on a mat #stop watching a rat #end if in a flat. The output: :: A cat sat on a mat The generated code: :: write('A cat\n') if 1: write(' sat on a mat\n') if dummyTrans: return trans.response().getvalue() else: return "" write(' watching a rat\n') write('in a flat.\n') #return ------- (flowControl.return) The template: :: 1 $test[1] 3 #def test 1.5 #if 1 #return '123' #else 99999 #end if #end def The output: :: 1 2 3 The generated code: :: def test(self, trans=None, dummyTrans=False, VFS=valueFromSearchList, VFN=valueForName, getmtime=getmtime, currentTime=time.time): """ Generated from #def test at line 5, col 1. """ if not trans: trans = DummyTransaction() dummyTrans = True write = trans.response().write SL = self._searchList filter = self._currentFilter globalSetVars = self._globalSetVars ######################################## ## START - generated method body write('1.5\n') if 1: return '123' else: write('99999\n') ######################################## ## END - generated method body if dummyTrans: return trans.response().getvalue() else: return "" :: def respond(self, trans=None, dummyTrans=False, VFS=valueFromSearchList, VFN=valueForName, getmtime=getmtime, currentTime=time.time): """ This is the main method generated by Cheetah """ if not trans: trans = DummyTransaction() dummyTrans = True write = trans.response().write SL = self._searchList filter = self._currentFilter globalSetVars = self._globalSetVars ######################################## ## START - generated method body write('\n1\n') write(filter(VFS(SL,"test",1)[1])) # generated from '$test[1]' at line 3, col 1. write('\n3\n') ######################################## ## END - generated method body if dummyTrans: return trans.response().getvalue() else: return ""