Skip to main content

ustache, Mustache for Python

Project description

ustache

Mustache for Python.

Documentation: ustache.readthedocs.io

Installation

pip install ustache

Usage

Python:

import ustache

print(ustache.render('Hello {{v}}', {'v': 'World!'}))
# Hello World!

Command line:

$ ustache -j data.json -o output.html template.mustache

Highlights

  • The fastest pure-python Mustache implementation to this date.
  • Command line interface.
  • Spec compliant, but also highly compatible with Mustache.js.
  • Small codebase, efficiently rendering to str or bytes, supporting streaming.
  • Customizable (property getter, partial resolver, and stringify, escape and lambda render functions).
  • Customizable template caching, with an optional memory-efficient mode (see xxhash optional dependency below).
  • No dynamic code generation, jit and transpiler friendly.

Considerations

For inter-compatibility with JavaScript (especially Mustache.js, enabling client-side rendering with the same templates), ustache exposes some atypical behavior:

  • Mustache blocks stick to JavaScript falseness (__bool__ is not honored): None, False, 0, nan, and empty sequences (including strings) are taken as falsy, while everything else (including empty mappings) will be considered truthy (Mustache.js Boolean and empty Array handling).
  • Mustache blocks receiving any iterable other than mappings and strings will result on a loop (Mustache.js Array handling).
  • Non-mapping sized objects will expose a virtual length property (JavaScript Array.length emulation). Customizable via getter parameter.
  • Mapping keys containing dot (.) or whitespace ( ) are unreachable, (Mustache.js property name limitation). Customizable via getter parameter.
  • Sequence elements are accessible by positive index in the same way mapping integer-keyed items are also accessible when no string key conflicts, as properties (JavaScript Object emulation). Customizable via getter parameter.

Optional dependencies

For minimalism and portability, ustache has no hard dependencies, while still supporting some libraries for added functionality:

  • xxhash will be used, if available, to avoid storing the whole template data as part of the template cache, dramatically reducing its memory footprint in many situations.

Optional but generally recommended dependencies can be easily installed all at once using ustache optional extra target:

$ pip install ustache[optional]

Syntax

Check out the mustache(5) manual.

For quick reference, here is a quick overview of the Mustache syntax.

Template (template.mustache):

{{!comment}}
<ul>
{{#object}}<li>{{property}}</li>{{/object}}
{{^object}}<li>As <b>object</b> is truthy, this won't be shown</li>{{/object}}
{{^null}}<li><b>null</b> is falsy</li>{{/null}}
{{#array}}<li>{{property}}</li>
{{/array}}
{{^array}}<li>Array isn't empty, this won't be shown.</li>{{/array}}
{{#empty_array}}<li>Empty Array, this won't be shown</li>{{/empty_array}}
{{^empty_array}}<li>empty_array is empty</li>{{/empty_array}}
{{&unescaped_html}}
</ul>

Data (data.json):

{
  "object": {
    "property": "Object property value"
  },
  "null": null,
  "array": [
    {"property": "Array item1 property"},
    {"property": "Array item2 property"},
    {"property": "Array item3 property"}
  ],
  "empty_array": [],
  "unescaped_html": "<li>this is unescaped html</li>"
}

Command:

$ ustache -j data.json -o output.html template.mustache

Output:

<ul>
<li>Object property value</li>
<li><b>null</b> is falsy</li>
<li>Array item1 property</li>
<li>Array item2 property</li>
<li>Array item3 property</li>
<li>empty_array is empty</li>
<li>this is unescaped html</li>
</ul>

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ustache-0.1.5.tar.gz (12.9 kB view details)

Uploaded Source

Built Distribution

ustache-0.1.5-py3-none-any.whl (12.4 kB view details)

Uploaded Python 3

File details

Details for the file ustache-0.1.5.tar.gz.

File metadata

  • Download URL: ustache-0.1.5.tar.gz
  • Upload date:
  • Size: 12.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for ustache-0.1.5.tar.gz
Algorithm Hash digest
SHA256 effd84a47a495ad9cda9613dc2d27f13b7ad5c3cd60c86243bfb0df14d366648
MD5 09669d65fb3f88eb11201bb9fb1d3d7c
BLAKE2b-256 d2788ded586be90aca0bbdc939654648046575067affcf82c649b06ec21f7b5c

See more details on using hashes here.

File details

Details for the file ustache-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: ustache-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 12.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.8.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.9.7

File hashes

Hashes for ustache-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 3d277909dd7bc3012eee101ffa68a241f66222b768fe1c7c77afff9a1d2028fc
MD5 c7b33298dfff95294abea442bbbb6f11
BLAKE2b-256 ae0ddcfe8116c9f31cb251c372742807a15abce28d1efeb2f3c6a7554cbad17f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page