Lila25mila
Lila25mila28. Januar 2019 01:19

Verwendung von Jinja2 mit Django (seit 1.8)

Auf der Medium Corporation-Ressource teilt ein Benutzer namens Samu seine Erfahrungen mit Jinja2 mit.
Ihm zufolge hat er zuvor Jinja2 in seinen mit Flask erstellten Projekten verwendet. Aber dann habe ich mich entschieden, Jinja2 mit Django für potenzielle Leistungssteigerungen (10-20x schneller im Vergleich zu Django-Vorlagen) und die Interaktion mit Nunjucks zu verwenden.
Samu teilt seine Erfahrungen mit Menschen, die bereits mit diesen Technologien vertraut sind, und sein Artikel soll die Schritte aufzeigen und ein wenig vereinfachen.


Wenn Sie gerade erst mit Django beginnen, empfiehlt er, mit einem großartigen Tutorial unter diesem Link zu beginnen. Sie können auch einige einfache Jinja2-Anweisungen von Django hier sehen.
Also lasst uns anfangen.

Zuerst Jinja2 installieren und konfigurieren
pip install Jinja2

und vergessen Sie nicht, es der need.txt-Datei hinzuzufügen. Fügen Sie dann die folgenden Template-Engine-Einstellungen zur Variable TEMPLATES in settings.py hinzu

{
   ‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’,
   ‘DIRS’: [],
   ‘APP_DIRS’: True,
   ‘OPTIONS’: {
     ‘environment’: ‘your-app.jinja2.environment’
   },
 }

Alle Vorlageneinstellungen sehen also in etwa so aus:

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’,
     ],
   },
 },
]

Vergessen Sie nicht, auch die Umgebungsvariable Jinja2-Einstellungen auf den richtigen App-Namen zu ändern (ändern Sie „your-app“ in den Namen Ihres App-Ordners).
Die Optionsumgebung ermöglicht es uns, bestimmte Funktionen in Vorlagen zu verwenden, die weiter angepasst werden. Erstellen Sie eine jinja2.py-Datei in Ihrem Anwendungsordner (wie die settings.py-Datei) und fügen Sie Folgendes hinzu:

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

Dadurch können wir Django-Template-Tags wie {% url 'index' %} oder {% static 'path / to / static / file.js' %} in unseren Jinja2-Templates verwenden. Wie Sie sehen können, verwenden diese Template-Tags die eigentliche Funktionalität von Django. Wenn Sie der Jinja2-Methode zum Aufrufen von Funktionen in einer Vorlage folgen, können Sie sie wie folgt verwenden:
 Django:

{% url ‘index’ variable %}

was in Jinja2 äquivalent ist:

{{url(‘index’, args=[variable])}}

Und für benannte Variablen können Sie Folgendes verwenden:

{{url('index', kwargs={'variable_key':variable}}}

 Django:

{% static ‘path’ %}

was äquivalent ist

{{ static(‘path’)}}

Wie Sie wahrscheinlich bereits bemerkt haben, können Sie der Jinja2-Umgebung grundsätzlich jede Funktionalität hinzufügen, indem Sie sie zur späteren Verwendung in Vorlagen zur Datei jinja2.py hinzufügen.

Endgültige Installationsordner

Sobald Sie Ihre Einstellungen richtig vorgenommen haben, können Sie später einfach einen Jinja2-Ordner erstellen, wo immer Sie möchten, dass ein Vorlagenordner erstellt wird. Es sollte automatisch funktionieren, da Django ein ziemlich gutes Framework ist. Wenn Sie sowohl Django- als auch Jinja2-Vorlagen haben, können Sie beide flexibel verwenden. Beispielsweise haben Sie möglicherweise ein Django-Admin-Panel und verschiedene Plugins, mit denen Sie arbeiten können und die Django-Vorlagen verwenden. Lesen Sie unbedingt die Jinja2-Dokumentation, um mehr zu erfahren.
Nachfolgend finden Sie ein Beispiel dafür, wie eine Anwendungsordnerstruktur für ein Projekt aussehen könnte:

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Кирилл Порох
  • 15. April 2020 04:19
  • (bearbeitet)

У МЕНЯ ОШИБКА


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'

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

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

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

  • Откатить джанго на более раннюю версию
  • Использовать стандартный шаблонизатор или какой-то другой... хотя тут альтернативы практически нет.
  • Убедиться, что вы точно используете последнюю версию jinja и она имеет нормальную совместимость с Django, всё-таки как никак этот шаблонизатор хорошо поддерживается разрабами и полагаю, что у вас просто установилась не самая актуальная версия.
  • Написать bug-request разработчикам jinja
  • Написать исправление и сделать pull-request разработчикам jinja

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

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

Кирилл Порох
  • 15. April 2020 05:04
  • (bearbeitet)

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

Evgenii Legotckoi
  • 15. April 2020 05:11
  • (bearbeitet)

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

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken