Использование Jinja2 с Django (начиная с 1.8)

Django, jinja, Python, template

На ресурсе Medium Corporation пользователь под ником Samu делится опытом использования Jinja2. По его словам ранее он использовал Jinja2 в своих проектах, созданных с помощью Flask. Но затем решил использовать Jinja2 с Django для потенциального повышения производительности (в 10-20 раз быстрее по сравнению с шаблонами Django) и взаимодействия с Nunjucks. Samu делится опытом с людьми, которые уже знакомы с данными технологиями, а его статья призвана немного раскрыть и упростить шаги.

Если же вы только начинаете с Django, то он рекомендует начать с замечательного урока по данной сылке . Так же можете посмотреть несколько простых инструкций для Jinja2 от Django здесь . Итак, приступим.

Сначала установите и настройте Jinja2
pip install Jinja2

и не забудьте добавить его в файл needs.txt. Затем добавьте следующие настройки движка шаблонов в переменную TEMPLATES в 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 на правильное имя приложения (измените «your-app» на то, как называется папка вашего приложения). Среда параметров позволяет нам использовать определенные функции в шаблонах, которые настраиваются дальше. Создайте файл 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

Это позволяет нам использовать теги шаблонов Django, такие как {% url ‘index’%} или {% static ‘path / to / static / file.js’%} в наших шаблонах Jinja2. Как видите, эти теги шаблонов используют фактические функции, предоставляемые Django. Следуя Jinja2-способу вызова функций в шаблоне, вы можете использовать их следующим образом: В Django:

{% url ‘index’ variable %}

что эквивалентно в Jinja2:

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

И для именованных переменных вы можете использовать:

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

В Django:

{% static ‘path’ %}

что эквивалентно

{{ static(‘path’)}}

Как вы, наверное, уже заметили, вы можете в основном добавлять любые функции в среду Jinja2, добавляя их в файл jinja2.py, для дальнейшего использования в шаблонах.

Итоговые установочные папки

После того, как вы правильно выполните настройки, в дальнейшем можно просто создать папку Jinja2 в любом месте, где будет создана папка шаблонов. Работать должно автоматически, так как Django - это довольно хорошая среда. Наличие обоих шаблонов Django и Jinja2 позволяет вам гибко использовать оба. Например, у вас может быть панель администратора Django, и различные плагины для работы, которые используют шаблоны Django. Обязательно прочитайте документацию Jinja2, чтобы узнать больше. Ниже представлен пример того, как одна структура папок приложения может выглядеть для проекта:

10% refund of hotel reservation amount on Booking
10% refund of hotel reservation amount on Booking
We offer a link with a 10% return on the amount of the order when booking a hotel through Booking

Comments

Only authorized users can post comments.
Please, Log in or Sign up
Last comments
June 24, 2019, 10:23 a.m.
Евгений Легоцкой

Хорошо, ну будут проблемы помимо того, что касается статей, то не стесняйтесь задавать вопросы на форуме.
МБ
June 24, 2019, 10:21 a.m.
Михаил Булатов

Извиняюсь, все работает(из-за невнимательности).
June 24, 2019, 9:52 a.m.
Евгений Легоцкой

Придётся делать ещё сигнал в дочернем qml и пробрасывать через коннекты и обработчики. А вообще нужно смотреть конкретный код и что вы пытаетесь сделать. Так что лучше будет, если вы зад...
June 21, 2019, 8:31 a.m.
Ruslan Polupan

Вот моя строка по которой все отлично сработало %cqtdeployer% -bin c:/CentralMposKeys/CentalMposKeys.exe -qmake c:/Qt/5.12.2/mingw73_64/bin/qmake.exe
June 21, 2019, 8:24 a.m.
Андрей Янкович

Возможно кому то пригодится сqtdeployer для windows работает точно так же как и для Linux разница лишь в команде запуска Linux: cqtdeployer Windows: %cqtdeployer...
Now discuss on the forum
June 24, 2019, 2:36 p.m.
Михаиллл

Нашел проект подключения к вебсокету.Но по моему адресу не могу подключиться.Нужно ли для этого использовать библиотеки?Вы не знаете адрес вебсокета, на котором можно проверить с...
June 24, 2019, 2:07 p.m.
Евгений Легоцкой

Я пока даже не знаю, а какой код самого подключения? использовали ожидание на подключение? Так делали? socket->connectToServer("market");if (socket->waitForConnected(1000)) ...
June 24, 2019, 1:19 p.m.
IscanderChe

// widget.cpp#include "widget.h"#include <QTableView>#include <QVBoxLayout>#include "checkboxdelegate.h"#include "comboboxdelegate.h"#include "mytableview.h"#include <QSqlD...
June 24, 2019, 11:16 a.m.
BlinCT

Хорошо, с этим понятно. Вот есть такой набор каких то кнопок. Цифры отображают в каком порядке должен менятся фокус.1. Как правильнее сделать отображение активного обьекта...
e
June 24, 2019, 10:58 a.m.
evgenm27

Спасибо за ответ, буду пробовать
Looking for a Job?
10,000.00 руб. - 15,000.00 руб.
Нужен помощник для создания API.
Moscow, Moscow, Russia
25,000.00 руб. - 30,000.00 руб.
Разработчик Qt/C++
Barnaul, Altai Krai, Russia

For registered users on the site there is a minimum amount of advertising

EVILEG
About
Services
Join us
© EVILEG 2015-2019
Recommend hosting TIMEWEB