Jinja — это движок веб-шаблонов для языка программирования Python . Он был создан Армином Ронахером и распространяется по лицензии BSD . Jinja похож на механизм шаблонов Django , но предоставляет выражения, подобные Python, при этом гарантируя, что шаблоны оцениваются в «песочнице» . Это текстовый язык шаблонов, поэтому его можно использовать для создания любой разметки, а также исходного кода.
Механизм шаблонов Jinja позволяет настраивать теги , [3] фильтры (для форматирования или преобразования значений [4] ), тесты (для оценки условий [4] ) и глобальные переменные . [5] Кроме того, в отличие от шаблонизатора Django, Jinja позволяет разработчику шаблонов вызывать функции с аргументами объектов. Jinja — это шаблонизатор Flask по умолчанию [6] , а также он используется Ansible , [7] Trac и Salt . [8] Он также используется для создания макросов SQL , например, для использования с dbt . [9]
Некоторые особенности Jinja: [10]
Jinja, как и Smarty , также поставляется с простой в использовании системой фильтров, аналогичной конвейеру Unix .
Синтаксис вывода вывода в Jinja использует, например, двойные фигурные скобки {{ Hello, World! }}
.
Операторы, которые устанавливают переменные в jinja или не имеют вывода, можно обернуть в {%
и %}
с помощью set
ключевого слова. Например, устанавливает вызываемую переменную со значением 42.{% set foo = 42 %}
foo
Как и выше, комментарии в джиндже можно писать с использованием знака числа ( #
) вместо процента ( %
), например {# helpful comment #}
.
Синтаксис создания фильтра в Jinja — это , например, вертикальная черта ( ) . Переменная может иметь несколько фильтров, например ). [4]|
{{ variable|filter }}
{{ variable|filter|filter }}
Синтаксис создания теста в Jinja — это ключевое слово, is
а также условия оценки валидности теста, например ). [4]{% if variable is divisibleby 10 %}do something{% endif %}
Циклы for можно использовать для перебора последовательностей, сохраняя при этом свойства их объектов. В следующем примере демонстрируется перебор списка пользователей с полями username
и .password
{% для пользователя в пользователях %} {{ user.username }} {{ user.password }} {% endfor %}
Хотя break
и continue
не разрешены внутри циклов, последовательности можно фильтровать.
Вот небольшой пример файла шаблона example.html.jinja
: [11]
<!DOCTYPE html> < html > < head > < title > {{ переменная | escape }} </ title > / head > < body > {% - for item в item_list %} {{ item }}{% if not Loop .last %} , {% endif %} {% - endfor %} < / тело > </ html >
и код шаблона:
из jinja2 импортируйте шаблон с открытым ( 'example.html.jinja' ) как f : tmpl = Template ( f . read ()) print ( tmpl . render ( variable = 'Value with <unsafe> data' , item_list = [ 1 , 2 , 3 , 4 , 5 , 6 ] ))
Это создает строку HTML:
<!DOCTYPE html> < html > < head > < title > Значение с < небезопасно > данные </ title > </ head > < body > 1, 2, 3, 4, 5, 6 </ тело > </ html >
Обратите внимание на знак минуса ( -
) после тега {%
: если вы добавите знак минуса ( -
) в начало или конец блока (например, тег For), комментарий или выражение переменной, пробелы до или после этого блока будут удаленный. [12]
Шаблон Jinja не обязательно должен иметь определенное расширение: вполне подойдет .html, .xml или любое другое расширение.