На ресурсі 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 на русском?
К сожалению нет, не подскажу. У меня был интерес к этому шаблонизатору, но так получилось, что мне пришлось бы переписывать очень большую часть проекта, чтобы его внедрить, поэтому я отказался до лучших времён, поскольку трудозатраты не окупились бы на данный момент.
Следовательно я дальше изучения основ не пошёл, поэтому и на русскоязычную документацию не имел возможности натолкнуться.
Но скорее всего полной русскоязычной документации вовсе нет, максимум отдельные статьи на разных ресурсах.