На ресурсе Medium Corporation пользователь под ником Samu делится опытом использования Jinja2.
По его словам ранее он использовал Jinja2 в своих проектах, созданных с помощью Flask. Но затем решил использовать Jinja2 с Django для потенциального повышения производительности (в 10-20 раз быстрее по сравнению с шаблонами Django) и взаимодействия с Nunjucks.
Samu делится опытом с людьми, которые уже знакомы с данными технологиями, а его статья призвана немного раскрыть и упростить шаги.
Если же вы только начинаете с Django, то он рекомендует начать с замечательного урока
по данной сылке
. Так же можете посмотреть несколько простых инструкций для Jinja2 от Django
здесь
.
Итак, приступим.
Сначала установите и настройте Jinja2
pip install Jinja2
и не забудьте добавить его в файл needs.txt. Затем добавьте следующие настройки движка шаблонов в переменную TEMPLATES в settings.py
{ ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’, ‘DIRS’: [], ‘APP_DIRS’: True, ‘OPTIONS’: { ‘environment’: ‘your-app.jinja2.environment’ }, }
Итак, все настройки шаблона выглядят примерно так:
TEMPLATES = [ { ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’, ‘DIRS’: [], ‘APP_DIRS’: True, ‘OPTIONS’: { ‘environment’: ‘your-app.jinja2.environment’ }, }, { ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’, ‘DIRS’: [], ‘APP_DIRS’: True, ‘OPTIONS’: { ‘context_processors’: [ ‘django.template.context_processors.debug’, ‘django.template.context_processors.request’, ‘django.contrib.auth.context_processors.auth’, ‘django.contrib.messages.context_processors.messages’, ], }, }, ]
Не забудьте также изменить переменную среды параметров Jinja2 на правильное имя приложения (измените «your-app» на то, как называется папка вашего приложения).
Среда параметров позволяет нам использовать определенные функции в шаблонах, которые настраиваются дальше. Создайте файл jinja2.py в папке вашего приложения (там же, где был файл settings.py) и добавьте следующее:
from django.contrib.staticfiles.storage import staticfiles_storage from django.urls import reverse from jinja2 import Environment def environment(**options): env = Environment(**options) env.globals.update({ ‘static’: staticfiles_storage.url, ‘url’: reverse, }) return env
Это позволяет нам использовать теги шаблонов Django, такие как {% url ‘index’%} или {% static ‘path / to / static / file.js’%} в наших шаблонах Jinja2. Как видите, эти теги шаблонов используют фактические функции, предоставляемые Django. Следуя Jinja2-способу вызова функций в шаблоне, вы можете использовать их следующим образом:
В Django:
{% url ‘index’ variable %}
что эквивалентно в Jinja2:
{{url(‘index’, args=[variable])}}
И для именованных переменных вы можете использовать:
{{url('index', kwargs={'variable_key':variable}}}
В Django:
{% static ‘path’ %}
что эквивалентно
{{ static(‘path’)}}
Как вы, наверное, уже заметили, вы можете в основном добавлять любые функции в среду Jinja2, добавляя их в файл jinja2.py, для дальнейшего использования в шаблонах.
Итоговые установочные папки
После того, как вы правильно выполните настройки, в дальнейшем можно просто создать папку Jinja2 в любом месте, где будет создана папка шаблонов. Работать должно автоматически, так как Django - это довольно хорошая среда. Наличие обоих шаблонов Django и Jinja2 позволяет вам гибко использовать оба. Например, у вас может быть панель администратора Django, и различные плагины для работы, которые используют шаблоны Django. Обязательно прочитайте документацию Jinja2, чтобы узнать больше.
Ниже представлен пример того, как одна структура папок приложения может выглядеть для проекта:
У МЕНЯ ОШИБКА
Выглядит так, что текущая версия jinja2 несовместима с с той версией Django, которую вы используете. По ходу разработчики Jinja2 так до сих пор не обновились.
Эта строчка from django.core.urlresolvers import reverse соответствует старым версия джанго, до версии 2 точно, как обстоит дело с более поздними версиями точно не помню, но на данный момент в последних вторых и третьих версиях джанго используется такой импорт from django.urls import reverse .
В вашем случае есть следующие выходы:
Спасибо, всё заработало!
Пожалуйста, а что конкретно сделали? Откатились?
Да,откатился . Неподскажите где найти документацию jinja2 на русском?
К сожалению нет, не подскажу. У меня был интерес к этому шаблонизатору, но так получилось, что мне пришлось бы переписывать очень большую часть проекта, чтобы его внедрить, поэтому я отказался до лучших времён, поскольку трудозатраты не окупились бы на данный момент.
Следовательно я дальше изучения основ не пошёл, поэтому и на русскоязычную документацию не имел возможности натолкнуться.
Но скорее всего полной русскоязычной документации вовсе нет, максимум отдельные статьи на разных ресурсах.