# ustache Mustache for Python. Documentation: [ustache.readthedocs.io](https://ustache.readthedocs.io) ## Installation ```python pip install ustache ``` ## Usage Python: ```python import ustache print(ustache.render('Hello {{v}}', {'v': 'World!'})) # Hello World! ``` Command line: ```sh $ 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. - Fully customizable behavior: property getter, partial resolver, stringification, escaping and lambdas. - 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 truthyness (`Mustache.js` truthyness emulation): - Empty mappings (such as `dict`) are inconditionally truthy. - `NaN`/`-NaN` are falsy. - Mustache blocks loop through any iterable other than mappings and strings (`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 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). ## Syntax Check out the [mustache(5) manual](https://mustache.github.io/mustache.5.html). For quick reference, here is a quick overview of the Mustache syntax. Template (`template.mustache`): ```handlebars {{!comment}}