Directives: Flow Control

#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

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!

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

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

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

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

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

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

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 ""