Medium Corporation ресурсында Samu есімді пайдаланушы Jinja2 пайдалану тәжірибесімен бөліседі.
Оның айтуынша, ол бұрын Flask көмегімен салынған жобаларында Jinja2-ні қолданған. Бірақ содан кейін мен Jinja2-ні Django-мен әлеуетті өнімділікті арттыру (Джанго үлгілерімен салыстырғанда 10-20 есе жылдам) және Nunjucks-пен өзара әрекеттесу үшін пайдалануды шештім.
Саму өз тәжірибесін осы технологиялармен бұрыннан жақсы білетін адамдармен бөліседі және оның мақаласы қадамдарды аздап ашуға және жеңілдетуге арналған.
Егер сіз Джангомен енді ғана жұмыс істеп жатсаңыз, ол тамаша оқулықтан бастауды ұсынады
осы сілтемеде
. Сондай-ақ, кейбір қарапайым Jinja2 нұсқауларын Django
осы жерден
көре аласыз.
Ендеше, бастайық.
Алдымен Jinja2 орнатыңыз және конфигурациялаңыз
pip install Jinja2
және оны need.txt файлына қосуды ұмытпаңыз. Содан кейін 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 параметрлері ортасының айнымалы мәнін дұрыс қолданба атына өзгертуді де ұмытпаңыз («қолданбаңыз» дегенді қолданба қалтаңыз қандай аталса да өзгертіңіз).
Параметрлер ортасы қосымша реттелетін үлгілердегі белгілі мүмкіндіктерді пайдалануға мүмкіндік береді. Қолданба қалтасында 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
Бұл Jinja2 үлгілерінде {% url 'index' %} немесе {% static 'path / to / static / file.js' %} сияқты Django үлгі тегтерін пайдалануға мүмкіндік береді. Көріп отырғаныңыздай, бұл үлгі тегтері Django ұсынған нақты функционалдылықты пайдаланады. Үлгідегі функцияларды шақырудың Jinja2 әдісіне сүйене отырып, оларды келесідей пайдалануға болады:
Джанго:
{% url ‘index’ variable %}
бұл Jinja2-де баламалы:
{{url(‘index’, args=[variable])}}
Ал аталған айнымалылар үшін мыналарды пайдалануға болады:
{{url('index', kwargs={'variable_key':variable}}}
Джанго:
{% 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 на русском?
К сожалению нет, не подскажу. У меня был интерес к этому шаблонизатору, но так получилось, что мне пришлось бы переписывать очень большую часть проекта, чтобы его внедрить, поэтому я отказался до лучших времён, поскольку трудозатраты не окупились бы на данный момент.
Следовательно я дальше изучения основ не пошёл, поэтому и на русскоязычную документацию не имел возможности натолкнуться.
Но скорее всего полной русскоязычной документации вовсе нет, максимум отдельные статьи на разных ресурсах.