Difference between revisions of "Python templates"
From Noah.org
Jump to navigationJump to searchLine 24: | Line 24: | ||
Your quota limit is %(LIMIT)d bytes. | Your quota limit is %(LIMIT)d bytes. | ||
Your amount used is %(USED)d bytes. | Your amount used is %(USED)d bytes. | ||
− | |||
""" | """ | ||
− | def | + | def format_alert_email (USERNAME, FROM, TO, SUBJECT, LIMIT, USED): |
return TEMPLATE % locals() | return TEMPLATE % locals() | ||
</pre> | </pre> | ||
Line 33: | Line 32: | ||
Running the template will give the following results: | Running the template will give the following results: | ||
<pre> | <pre> | ||
− | >>> print | + | >>> print format_alert_email('Joe Bloe','root@example.com','jbloe@example.com','over quota',1000,1234) |
From: root@example.com | From: root@example.com | ||
To: jbloe@example.com | To: jbloe@example.com |
Revision as of 16:27, 6 June 2007
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 format_alert_email (USERNAME, FROM, TO, SUBJECT, LIMIT, USED): return TEMPLATE % locals()
Running the template will give the following results:
>>> print format_alert_email('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. >>>