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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

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

Кирилл Порох
  • Сәуір 15, 2020, 4: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, 4: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, 4:42 Т.Ж.

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

Evgenii Legotckoi
  • Сәуір 15, 2020, 4:43 Т.Ж.

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

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

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

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

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

Пікірлер

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

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:66ұпай,
  • Бағалау ұпайлары-1
t

C++ - Тест 001. Первая программа и типы данных

  • Нәтиже:33ұпай,
  • Бағалау ұпайлары-10
t

Qt - Тест 001. Сигналы и слоты

  • Нәтиже:52ұпай,
  • Бағалау ұпайлары-4
Соңғы пікірлер
G
GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssrАқп. 8, 2024, 6:43 Т.Қ.
Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
АК
Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
Енді форумда талқылаңыз
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
F
FynjyШілде 22, 2024, 4:15 Т.Ж.
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
BlinCT
BlinCTМаусым 25, 2024, 1 Т.Ж.
Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
BlinCT
BlinCTМамыр 5, 2024, 5:46 Т.Ж.
Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
Evgenii Legotckoi
Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

Бізді әлеуметтік желілерде бақылаңыз