Skip to content

Latest commit

 

History

History
167 lines (109 loc) · 4.49 KB

README.rst

File metadata and controls

167 lines (109 loc) · 4.49 KB

Pystache

image

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

Requirements

Pystache currently works using the following versions of Python:

  • Python 2.4
  • Python 2.5
  • Python 2.6
  • Python 2.7

Install It

pip install pystache

Use It

>>> 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!'

Unicode

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.

Test It

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

Mailing List

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.

Author

>>> context = { 'author': 'Chris Wanstrath', 'email': 'chris@ozmm.org' }
>>> pystache.render("{{author}} :: {{email}}", context)
u'Chris Wanstrath :: chris@ozmm.org'