❗ На сервере, где установлено окружение (напр. python3.7), необходимо добавить опцию --user:
which pip3.7
/usr/local/bin/pip3.7
pip3.7 install Jinja2"
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied...
Consider using the `--user` option or check the permissions." %}
pip3.7 install --user Jinja2"
⚠️Экспериментальная поддержка Python 3 :nbsp: Jinja 2.7 обеспечивает экспериментальную поддержку Python >= 3.3. Это означает, что все unittests передают новую версию, но там могут быть небольшие ошибки, и поведение может быть непоследовательным. Если вы заметили какие-либо ошибки, сообщите об этом в трекер Jinja.
Если по вопросу "с какого фреймворка начинать в Питоне" еще есть плюрализм (от "Flask - он легковесный, наращиваешь сам и понимаешь как все работает" до "Django - в нем все есть, а чего нет, быстро доустанавливаешь"), то с шаблонизаторами все упростилось.
До недавнего времени шаблонизаторов было 3-4: Jinja, Mako, Genshi и, конечно, Django Templates.
Собственно, они никуда не делись, Genshi и сейчас используется по умолчанию в Turbogears 2, а Mako - в Pylons/Pyramid.
Но и Turbogears, и Django и Pyramid с недавнего времени поддерживают шаблонизатор, ставший популярным благодаря Flask - Jinja 2.
Ну и, наконец, посмтрим на подборку генераторов статических сайтов (http://www.staticgen.com/): 11 из 17, в том числе самый популярный Pelican (http://docs.getpelican.com/) опираются на Jinja2.
Итого - вопрос с выбором шаблонизатора Python на сегодня не стоит.
# -*- coding: utf-8 -*-
from jinja2 import Template
template = Template('Hello !')
print(template.render(name=u'Вася'))
{# Это кусок кода, который временно не нужен, но удалять жалко
{% for user in users %}
...
{% endfor %}
#}
from jinja2 import Template
text = '{% for item in range(5) %}Hello ! {% endfor %}'
template = Template(text)
print(template.render(name=u'Вася'))
from jinja2 import Template
template = Template("{% set a, b, c = 'foo', 'фуу', 'föö' %}")
m = template.module
print(m.a)
print(m.b)
print(m.c)
from jinja2 import Template
template = Template('{% macro foo() %}42{% endmacro %}23')
m = template.module
print(m)
print(m.foo())
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
{% for item in range(5) %}
Hello !
{% endfor %}
</body>
</html>
from jinja2 import Template
html = open('foopkg/templates/0.hello.html').read()
template = Template(html)
print(template.render(name=u'Петя'))