В документе API jinja на pocoo.org говорится:
Самый простой способ настроить Jinja2 для загрузки шаблонов для вашего приложения выглядит примерно так:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Это создаст среду шаблонов с настройками по умолчанию и загрузчик, который будет искать шаблоны в папке шаблонов внутри пакета python yourapplication .
Как оказалось, это не так просто, потому что вам нужно создать / установить пакет python с вашими шаблонами в нем, что вносит много ненужной сложности, особенно если вы не собираетесь распространять свой код. Вы можете обратиться к SO-вопросам по теме здесь и здесь , но ответы расплывчаты и неудовлетворительны.
Очевидно, что наивный новичок просто загружает шаблон непосредственно из файловой системы, а не как ресурс в пакете. Как это сделать?
jinja2.load_template('template.html')
Jinja2.render(template_name, data)
jinja2.Environment(loader=templateLoader, autoescape=True)
. Или см. Документацию по API для получения дополнительной информации. Только что узнал, что я получил серьезную XSS-уязвимость, следуя этому ответу: /Более простой способ - напрямую вызвать
jinj2.Template
конструктор и использовать егоopen
для загрузки файла:from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')
источник
Вот один лайнер:
template = Template(open('template_file.j2').read())
Затем вы можете отобразить шаблон в другой строке или для всех в одной строке:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
источник
При использовании Python 3.4+ и Jinja2 - v2.11 + - мы можем объединить pathlib и файловую систему python, чтобы упростить процесс.
from pathlib import Path ... p = Path(__file__).parent.parent / 'templates' # sample relative path env = Environment( loader=FileSystemLoader(Path(p))) template = env.get_template('your_file.jinja2')
Мне неудобно использовать напрямую,
Template(file)
поскольку обработка наследования шаблонов в Jinja может работать некорректно.Поддержка Pathlib добавлена только в последней версии Jinja - v2.11 +
источник