Ludicrously simple templates with Python
28th July 2003
A long, long time ago I wrote my first ever PHP templating system. It was pretty simple; it consisted of a function that took two arguments: the name of a template file, and an associative array of replacements to make on that file.
I’ve finally got around to playing with Python CGIs for web development recently, and decided I needed a similar system. Thanks to Python’s powerful string formatting operator, it ended up as a one-liner:
def template(file, vars):
return open(templatedir.template, 'r').read() % vars
Presuming you’ve set templatedir at the top of the script, the above function lets you load a template and make some simple replacements on it with a single function call. For example:
<h3>%(title)s</h3>
%(body)s
<p class="footer">Posted: %(date)s</p>
With the above saved in the template directory as “entry.tpl”, the template function above can be used thus:
print template('entry.tpl', {
'title':'A blog entry',
'body':'Entry goes here...',
'date':'3rd July 2003'})
The work is all done by the % vars
bit at the end of the line. Since vars is a dictionary, Python substitutes the named items in the dictionary for their corresponding %(varname)s
tokens in the string loaded from the template file. More information on string formatting operations can be found in the manual.
As templating systems go, it’s far from the most useful or complete solution. It does however show that a little Python can go quite a long way.
More recent articles
- Weeknotes: Embeddings, more embeddings and Datasette Cloud - 17th September 2023
- Build an image search engine with llm-clip, chat with models with llm chat - 12th September 2023
- LLM now provides tools for working with embeddings - 4th September 2023
- Datasette 1.0a4 and 1.0a5, plus weeknotes - 30th August 2023
- Making Large Language Models work for you - 27th August 2023
- Datasette Cloud, Datasette 1.0a3, llm-mlc and more - 16th August 2023
- How I make annotated presentations - 6th August 2023
- Weeknotes: Plugins for LLM, sqlite-utils and Datasette - 5th August 2023
- Catching up on the weird world of LLMs - 3rd August 2023
- Run Llama 2 on your own Mac using LLM and Homebrew - 1st August 2023