Mustache v1.4 implementation with lambdas.
Project description
combustache
Mustache v1.4 implementation with lambdas.
Usable both in code and as CLI.
To render a mustache template use combustache.render
.
Processed templates are cached; to clear cache use combustache.cache_clear
.
Installation
From PyPI:
pip install combustache
From git:
pip install git+https://github.com/sakhezech/combustache
Usage as CLI
combustache ...
or python -m combustache ...
usage: combustache [-h] [-v] [-s] [-d DATA] [-o OUTPUT] [-p PARTIAL]
[--partial-dir PARTIAL_DIR] [--partial-ext PARTIAL_EXT]
[--left-delimiter LEFT_DELIMITER] [--right-delimiter RIGHT_DELIMITER]
template
an explosive mustache v1.4 implementation with lambdas
positional arguments:
template mustache template file (use -s for string)
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-s, --string pass in a string instead of a file for template
-d DATA, --data DATA data json file (defaults to stdin)
-o OUTPUT, --output OUTPUT
output file (defaults to stdout)
-p PARTIAL, --partial PARTIAL
mustache partial file (can add multiple)
--partial-dir PARTIAL_DIR
directory with mustache partials
--partial-ext PARTIAL_EXT
partial file extention (defaults to '.mustache')
--left-delimiter LEFT_DELIMITER
left mustache template delimiter (defaults to '{{')
--right-delimiter RIGHT_DELIMITER
right mustache template delimiter (defaults to '}}')
Usage in code
Basic
>>> template = 'Hello {{place}}!'
>>> data = {'place': 'world'}
>>> combustache.render(template, data)
'Hello world!'
Partials
Partials have to be provided as a dictionary.
>>> template = 'My {{>md_link}}!'
>>> data = {'name': 'Github', 'url': 'https://github.com/sakhezech'}
>>> partials = {'md_link': '[{{name}}]({{url}})'}
>>> combustache.render(template, data, partials)
'My [Github](https://github.com/sakhezech)!'
Custom delimiters
You can specify the delimiters outside the template.
>>> template = 'My name is <%name%>.'
>>> data = {'name': 'Anahit'}
>>> combustache.render(template, data, left_delimiter='<%', right_delimiter='%>')
'My name is Anahit.'
List indexing
You can index into lists by dotting into them with a number. Both positive and negative numbers work.
>>> data = {'items': ['Apricot', 'Cherry', 'Pomegranate']}
>>> template = 'The first item is {{items.0}}.'
>>> combustache.render(template, data)
'The first item is Apricot.'
>>> template = 'The last item is {{items.-1}}.'
>>> combustache.render(template, data)
'The last item is Pomegranate.'
Custom stringify
You can provide a custom stringify function if needed.
Note: None -> ''
happens here, so you will need to handle this case yourself.
>>> template = 'This statement is {{bool}}.'
>>> data = {'bool': True}
>>> def lowercase_bool(val):
... if val is None:
... return ''
... if isinstance(val, bool):
... return str(val).lower()
... return str(val)
...
>>> combustache.render(template, data, stringify=lowercase_bool)
'This statement is true.'
Custom escaping
If you need some other way of escaping your data, you can provide a custom escaping function.
>>> template = 'Escaped: {{content}}; Not escaped: {{{content}}}.'
>>> data = {'content': '{hello}'}
>>> def escape_braces(string):
... return string.replace('{', r'\{').replace('}', r'\}')
...
>>> combustache.render(template, data, escape=escape_braces)
'Escaped: \\{hello\\}; Not escaped: {hello}.'
Handling missing data
If you want to do something on a missing value, like raise an exception or insert a default value, you can do that too.
Note: None
is not missing data.
>>> template = '{{something}}'
>>> data = {}
>>> combustache.render(template, data, missing_data=lambda: 'NO DATA')
'NO DATA'
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
Built Distribution
Hashes for combustache-1.0.2-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 603deaaebfc5836cb786b2fe4ae313684d0d06aa852c77c57234effef853b24f |
|
MD5 | 437b1fa2a9e5550f132d2e29ff5ac169 |
|
BLAKE2b-256 | 599f1070db60195f2ba4b29e2534f4b1dc99644377d1dab8f106cd12cce34f77 |