Lila25mila
Қаң. 28, 2019, 12:19 Т.Қ.

Джангомен Jinja2 пайдалану (1.8 нұсқасынан бастап)

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 құжаттамасын оқып шығыңыз.
Төменде жоба үшін бір қолданба қалтасының құрылымы қандай болуы мүмкін екендігінің мысалы келтірілген:

Мақала бойынша сұралады0сұрақтар(лар)

3

Ол саған ұнайды ма? Әлеуметтік желілерде бөлісіңіз!

Кирилл Порох
  • Сәуір 15, 2020, 2:19 Т.Қ.
  • (өңделген)

У МЕНЯ ОШИБКА


File "C:\Users\даня\Desktop\CODS\Django\imbanamid\first\jinja2.py", line 4, in <module>
    from django.core.urlresolvers import reverse
ModuleNotFoundError: No module named 'django.core.urlresolvers'
Evgenii Legotckoi
  • Сәуір 15, 2020, 2:31 Т.Қ.

Выглядит так, что текущая версия jinja2 несовместима с с той версией Django, которую вы используете. По ходу разработчики Jinja2 так до сих пор не обновились.

Эта строчка from django.core.urlresolvers import reverse соответствует старым версия джанго, до версии 2 точно, как обстоит дело с более поздними версиями точно не помню, но на данный момент в последних вторых и третьих версиях джанго используется такой импорт from django.urls import reverse .

В вашем случае есть следующие выходы:

  • Откатить джанго на более раннюю версию
  • Использовать стандартный шаблонизатор или какой-то другой... хотя тут альтернативы практически нет.
  • Убедиться, что вы точно используете последнюю версию jinja и она имеет нормальную совместимость с Django, всё-таки как никак этот шаблонизатор хорошо поддерживается разрабами и полагаю, что у вас просто установилась не самая актуальная версия.
  • Написать bug-request разработчикам jinja
  • Написать исправление и сделать pull-request разработчикам jinja
Кирилл Порох
  • Сәуір 15, 2020, 2:42 Т.Қ.

Спасибо, всё заработало!

Evgenii Legotckoi
  • Сәуір 15, 2020, 2:43 Т.Қ.

Пожалуйста, а что конкретно сделали? Откатились?

Кирилл Порох
  • Сәуір 15, 2020, 3:04 Т.Қ.
  • (өңделген)

Да,откатился . Неподскажите где найти документацию jinja2 на русском?

Evgenii Legotckoi
  • Сәуір 15, 2020, 3:11 Т.Қ.
  • (өңделген)

К сожалению нет, не подскажу. У меня был интерес к этому шаблонизатору, но так получилось, что мне пришлось бы переписывать очень большую часть проекта, чтобы его внедрить, поэтому я отказался до лучших времён, поскольку трудозатраты не окупились бы на данный момент.
Следовательно я дальше изучения основ не пошёл, поэтому и на русскоязычную документацию не имел возможности натолкнуться.
Но скорее всего полной русскоязычной документации вовсе нет, максимум отдельные статьи на разных ресурсах.

Пікірлер

Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
Кіріңіз немесе Тіркеліңіз