Templating with Cheetah - Basic Templating (
Page 2 of 4 )
Let's start off with a basic template with which to test out Cheetah. A simple counter will work fine. Create a file named counter.tmpl:
Hello, This page has been viewed $counter times.
In the above example, we will obviously want to substitute the $counter variable for the number of times the particular page has been viewed. It's pretty easy to turn our template into a real, working page in just a few lines of Python. We'll use a text file to store the count for simplicity's sake:
import os.path
from Cheetah.Template import Template
# Update the count
if os.path.exists ( 'count.txt' ):
count = int ( file ( 'count.txt' ).read() )
count = count + 1
else:
count = 1
file ( 'count.txt', 'r' ).write ( str ( count ) )
print Template ( file = 'counter.tmpl', searchList =
[{ 'counter': str ( count ) }] )
After updating the count, we simply pass the file we wish to parse and a dictionary containing the replacement value. Cheetah then does the rest and returns the result, which is printed.
It's also possible to pass objects to Cheetah. Take a look at this template, contact.tmpl, which display's a particular person's contact information:
<b>Name:</b> $profile.name<br />
<b>E-Mail:</b> $profile.email<br />
<b>Phone:</b> $profile.phone<br />
<b>MSN:</b> $profile.msn<br />
<b>AIM:</b> $profile.aim<br />
<b>ICQ:</b> $profile.icq<br />
<b>YIM:</b> $profile.yim
All we need to do is create an object with the above properties and pass it under the profile key:
from Cheetah.Template import Template
class Profile:
def __init__ ( self, name, email, phone, msn, aim, icq, yim ):
self.name = name
self.email = email
self.phone = phone
self.msn = msn
self.aim = aim
self.icq = icq
self.yim = yim
johnDoe = Profile ( 'John Doe', 'jdoe@google.com', '(555) 555-
5555', 'jdoe@google.com', 'JDoe', '0123456789', 'JDoe' )
print Template ( file = 'contact.tmpl', searchList =
[{ 'profile': johnDoe }] )
Cheetah then substitutes the appropriate attributes.