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 Т.Ж.
  • (өңделген)

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

Пікірлер

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

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:50ұпай,
  • Бағалау ұпайлары-4
m
  • molni99
  • Қаз. 26, 2024, 1:37 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:80ұпай,
  • Бағалау ұпайлары4
m
  • molni99
  • Қаз. 26, 2024, 1:29 Т.Ж.

C++ - Тест 004. Указатели, Массивы и Циклы

  • Нәтиже:20ұпай,
  • Бағалау ұпайлары-10
Соңғы пікірлер
ИМ
Игорь МаксимовҚар. 22, 2024, 11:51 Т.Ж.
Django - Оқулық 017. Теңшелген Django кіру беті Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiҚаз. 31, 2024, 2:37 Т.Қ.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEҚаз. 19, 2024, 8:19 Т.Ж.
Qt Creator көмегімен fb3 файл оқу құралы Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовҚаз. 5, 2024, 7:51 Т.Ж.
Django - Сабақ 064. Python Markdown кеңейтімін қалай жазуға болады Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5Шілде 5, 2024, 11:02 Т.Ж.
QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Енді форумда талқылаңыз
m
moogoҚар. 22, 2024, 7:17 Т.Ж.
Mosquito Spray System Effective Mosquito Systems for Backyard | Eco-Friendly Misting Control Device & Repellent Spray - Moogo ; Upgrade your backyard with our mosquito-repellent device! Our misters conce…
Evgenii Legotckoi
Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Қар. 15, 2024, 6:04 Т.Ж.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectМаусым 4, 2022, 3:49 Т.Ж.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…

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