Pystache is a Python implementation of Mustache. Mustache is a framework-agnostic, logic-free templating system inspired by ctemplate and et. Like ctemplate, Mustache "emphasizes separating logic from presentation: it is impossible to embed application logic in this template language."
The mustache(5) man page provides a good introduction to Mustache's syntax. For a more complete (and more current) description of Mustache's behavior, see the official Mustache spec.
Pystache is semantically versioned and can be found on PyPI. This version of Pystache passes all tests in version 1.0.3 of the spec.
Logo: David Phillips
Pystache currently works using the following versions of Python:
- Python 2.4
- Python 2.5
- Python 2.6
- Python 2.7
pip install pystache
>>> import pystache
>>> pystache.render('Hi {{person}}!', {'person': 'Mom'})
u'Hi Mom!'
You can also create dedicated view classes to hold your view logic.
Here's your view class (in examples/readme.py):
class SayHello(object):
def to(self):
return "Pizza"
Like so:
>>> from examples.readme import SayHello
>>> hello = SayHello()
Then your template, say_hello.mustache:
Hello, {{to}}!
Pull it together:
>>> renderer = pystache.Renderer()
>>> renderer.render(hello)
u'Hello, Pizza!'
This section describes Pystache's handling of unicode, strings, and encodings. Pystache's template rendering methods output only unicode. Moreover, internally Pystache uses only unicode strings. For input, Pystache accepts both unicode
and str
strings.
The Renderer class supports a number of attributes that control how it converts str
strings to unicode on input. These attributes include the file_encoding, string_encoding, and decode_errors attributes.
The file_encoding attribute is the encoding the renderer uses to convert to unicode any files read from the file system. Similarly, string_encoding is the encoding the renderer uses to convert any other strings of type str to unicode (e.g. context values of type str
). The decode_errors attribute is what the renderer passes as the errors
argument to Python's built-in unicode() function. The valid values are 'strict', 'ignore', or 'replace'.
Each of these attributes can be set via the Renderer class's constructor using a keyword argument of the same name. In addition, the file_encoding attribute can be controlled on a per-view basis by subclassing the TemplateSpec class. The attributes default to values set in Pystache's defaults
module.
nose works great! :
pip install nose
cd pystache
nosetests
Depending on your Python version and nose installation, you may need to type, for example :
nosetests-2.4
To include tests from the Mustache spec in your test runs: :
git submodule init
git submodule update
To run all available tests (including doctests):
nosetests --with-doctest --doctest-extension=rst
or alternatively (using setup.cfg):
python setup.py nosetests
To run a subset of the tests, you can use this pattern, for example: :
nosetests --tests tests/test_context.py:GetValueTests.test_dictionary__key_present
As of November 2011, there's a mailing list, pystache@librelist.com.
Archive: http://librelist.com/browser/pystache/
Note: There's a bit of a delay in seeing the latest emails appear in the archive.
>>> context = { 'author': 'Chris Wanstrath', 'email': 'chris@ozmm.org' }
>>> pystache.render("{{author}} :: {{email}}", context)
u'Chris Wanstrath :: chris@ozmm.org'