Python templates

From Noah.org
Revision as of 16:26, 6 June 2007 by Root (talk | contribs)
Jump to navigationJump to search


Python string templates using the % template operator

Python has an excellent built-in template system -- the % operator. Granted this is not what many people would consider a "real" template system, but it's much more powerful than most people give it credit for.

The key is to combine % with the locals() function. Template code practically writes itself. Remember string templates can have more than just %d and %s style replacements. It can also take a dictionary, like %(DICT_KEY1)s or %(DICT_KEY2)d. Next remember that the locals() function returns a dictionary of local variables. This makes it trivial to merge local variables into a string template.

# This is a string template to format an email.
TEMPLATE="""From: %(FROM)s
To: %(TO)s
Hello %(USERNAME)s,
Subject: %(SUBJECT)s

Your account is over quota. 
Your quota limit is %(LIMIT)d bytes.
Your amount used is %(USED)d bytes.

"""

def send_alert (USERNAME, FROM, TO, SUBJECT, LIMIT, USED):
    return TEMPLATE % locals()

Running the template will give the following results:

>>> print send_alert ('Joe Bloe', 'root@example.com', 'jbloe@example.com', 'over quota', 1000, 1234)
From: root@example.com
To: jbloe@example.com
Hello Joe Bloe,
Subject: over quota

Your account is over quota. 
Your quota limit is 1000 bytes.
Your amount used is 1234 bytes.

>>>