Задать вопрос

Переход с Django Templates на Jinja2?

В Джанге 1.8 появилась возможность в качестве шаблонизатора указать Jinja2. Она конечно и раньше была в виде сторонних приложений, но теперь это все из коробки. Я задумываюсь над тем чтобы перейти на Jinja2.
Собственно чем меня не устраивают джанговские шаблоны - в основном скоростью, остальное не столь существенно.

В связи с этим такие вопросы.

1. Как жить без кастомных шаблонных тэгов? Например разные общие блоки типа меню реализованы с помощью кастомных тэгов. В jijnja2 создание кастомных тэгов сильно заморочено, context processors тоже отсутствуют.

2. Как жить без context processors? request и прочеее каждый раз руками передавать во вьюху?
  • Вопрос задан
  • 7697 просмотров
Подписаться 9 Оценить 4 комментария
Решения вопроса 2
появление официальной возможности подключить jinja не значит что расширения стали бесполезны, когда потребовалось в итоге взвесив все за и против всё равно остановился на niwinz.github.io/django-jinja
При этом я не отключал стандартные шаблоны, я использую и то и другое, где узкем местом стали шаблоны, перешел на использование jinja.

пользуюсь примерно таким:
TEMPLATES = [
    {
        'NAME': 'django',
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': False,
        'OPTIONS': {
            'string_if_invalid': 'VARIABLE ERROR',
            'context_processors': [
                "django.contrib.auth.context_processors.auth",
                "django.core.context_processors.request",
                'django.contrib.messages.context_processors.messages',
                'core.context_processors.cities_list',
                'django.core.context_processors.static',
            ],
            'loaders': [
                ('django.template.loaders.cached.Loader', [
                    'django.template.loaders.filesystem.Loader',
                    'django.template.loaders.app_directories.Loader',
                ]),
            ],

        },
    },
    {
        'NAME': 'jinja2',
        'BACKEND': 'django_jinja.backend.Jinja2',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'autoescape': False,  # !!!!!!
            "app_dirname": "jinja2",
            "match_extension": ".html",
            "newstyle_gettext": True,
            "translation_engine": "django.utils.translation",
            "extensions": [
                "jinja2.ext.do",
                "jinja2.ext.loopcontrols",
                "jinja2.ext.with_",
                "jinja2.ext.i18n",
                "jinja2.ext.autoescape",
                "django_jinja.builtins.extensions.CsrfExtension",
                "django_jinja.builtins.extensions.CacheExtension",
                "django_jinja.builtins.extensions.TimezoneExtension",
                "django_jinja.builtins.extensions.UrlsExtension",
                "django_jinja.builtins.extensions.StaticFilesExtension",
                "django_jinja.builtins.extensions.DjangoFiltersExtension",
                # "coffin.spaceless" не работает в py3
            ],
        }
    },
]
Ответ написан
@andrewshkovskii
Рекомендовал бы посмотреть в сторону wheezy.templates, если уж используете шаблонизатор на бекенде.
Во много раз быстрее имеющихся шаблонизаторов.
Но прийдется хорошенько поменять логику построения шаблонов и парадигму шаблонизаторов после Django-подобных шаблонизаторов.
(Есть несколько недостатков, но они решаемы. В частности - автоматический экспейп).
Если интересно - обращайтесь. Не так давно перевел очень большой проект на этот шаблонизатор и прирост производительности от 3 до 5 раз(иногда и до 10 доходило в шаблонах где много инклюдов).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы