67 lines
1.8 KiB
ReStructuredText
67 lines
1.8 KiB
ReStructuredText
Jinja
|
|
=====
|
|
|
|
Jinja is a fast, expressive, extensible templating engine. Special
|
|
placeholders in the template allow writing code similar to Python
|
|
syntax. Then the template is passed data to render the final document.
|
|
|
|
It includes:
|
|
|
|
- Template inheritance and inclusion.
|
|
- Define and import macros within templates.
|
|
- HTML templates can use autoescaping to prevent XSS from untrusted
|
|
user input.
|
|
- A sandboxed environment can safely render untrusted templates.
|
|
- AsyncIO support for generating templates and calling async
|
|
functions.
|
|
- I18N support with Babel.
|
|
- Templates are compiled to optimized Python code just-in-time and
|
|
cached, or can be compiled ahead-of-time.
|
|
- Exceptions point to the correct line in templates to make debugging
|
|
easier.
|
|
- Extensible filters, tests, functions, and even syntax.
|
|
|
|
Jinja's philosophy is that while application logic belongs in Python if
|
|
possible, it shouldn't make the template designer's job difficult by
|
|
restricting functionality too much.
|
|
|
|
|
|
Installing
|
|
----------
|
|
|
|
Install and update using `pip`_:
|
|
|
|
.. code-block:: text
|
|
|
|
$ pip install -U Jinja2
|
|
|
|
.. _pip: https://pip.pypa.io/en/stable/quickstart/
|
|
|
|
|
|
In A Nutshell
|
|
-------------
|
|
|
|
.. code-block:: jinja
|
|
|
|
{% extends "base.html" %}
|
|
{% block title %}Members{% endblock %}
|
|
{% block content %}
|
|
<ul>
|
|
{% for user in users %}
|
|
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
|
|
{% endfor %}
|
|
</ul>
|
|
{% endblock %}
|
|
|
|
|
|
Links
|
|
-----
|
|
|
|
- Website: https://palletsprojects.com/p/jinja/
|
|
- Documentation: https://jinja.palletsprojects.com/
|
|
- Releases: https://pypi.org/project/Jinja2/
|
|
- Code: https://github.com/pallets/jinja
|
|
- Issue tracker: https://github.com/pallets/jinja/issues
|
|
- Test status: https://dev.azure.com/pallets/jinja/_build
|
|
- Official chat: https://discord.gg/t6rrQZH
|