Подтвердить что ты не робот

Любые недостатки или gotchas для использования шаблонов Jinja2 в Django?

После прочтения документации Jinja2 я заинтересован в ее использовании в будущих проектах Django. Тем не менее, мне интересно, если кто-нибудь столкнулся с недостатками или gotchas при использовании Jinja2 шаблонов с Django? Если да, то как вы обходились вокруг них?

Я бы тоже не просил услышать о положительном опыте, просто чтобы получить хорошее поперечное сечение лучшего и худшего из Jinja2.

4b9b3361

Ответ 1

Я еще не использовал Jinja2 с фактическим сайтом Django, но я преобразовал приложение с использованием шаблонов Django в автономном режиме на шаблоны Jinja2. Единственной (очень незначительной) проблемой, с которой я столкнулся, является отсутствие тега шаблона {% spaceless%}.

Ответ 2

Я использую Jinja2 в некоторых своих проектах и ​​люблю дополнительную выразительность, которую он мне дает. Я могу разделить логику представления и логику приложения, но мне не нужно наклоняться назад, чтобы вызвать функцию/метод, который я специально разработал для своего уровня представления.

В дополнение к тому, что уже было указано другими плакатами, вот некоторые вещи, которые я нашел:

  • Приложение Admin тесно связано с шаблонами Django
  • Представленные по умолчанию представления и декораторы, которые поставляются с приложением Auth (и в другом месте), связаны с шаблонами Django, поэтому вам придется дублировать усилия, если вы хотите использовать шаблоны Jinja2 для входа/выхода из системы /etc

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

Ответ 4

Расширение Jinja2 намного сложнее, чем система шаблонов Django (я говорю о templatetags). Хотя большинство функций тегов включения можно достичь с помощью макросов в Jinja (они даже кажутся более подходящими), писать бит более сложных тегов очень сложно в Jinja (см. документы для себя).

Кроме того, единственным препятствием являются привычки, основанные на Django...;)

Ответ 5

В соединительной линии Django добавлен новый код, который позволяет вам писать классы TemplateLoaders и Template, которые можно использовать для работы с разными языками шаблонов. Документы добавлены для него в http://docs.djangoproject.com/en/dev/ref/templates/api/#using-an-alternative-template-language, и он будет в версии 1.2. Это должно вырезать большую часть gotchas с помощью таких вещей, как использование пользовательских шаблонов для входа, выхода из системы, администратора и т.д.

Альтернативное решение - использовать слой поверх Django, например Chouwa или Djinja2. У вас возникнут проблемы с использованием встроенных представлений Django для использования ваших шаблонов, но он работает, если вы не хотите использовать соединительную линию Django.

Как только вы сделали это, единственная серьезная проблема заключается в том, что большая часть материалов, которые Django предоставляет шаблонам (особенно для рамки комментариев), отображается в пользовательских тегах, которые не переводятся на Jinja2. К сожалению, проблемы обратной совместимости не видят, что это может измениться в ближайшее время.

Ответ 6

Для меня самая неприятная вещь от использования Jinja2 в Django заключается в том, что вы не сможете использовать некоторые приложения Django, когда у них есть свои собственные шаблоны или теги шаблонов (например, django-uni -формы).

Это может расстраивать несколько раз, когда вы находите отличное приложение, которое решает ваши проблемы, но вы не можете использовать его, потому что оно несовместимо с Jinja2.

Кстати, кажется, что Armin Ronacher (автор Jinja2) будет работать над новым бэкэндом механизма шаблонов, который будет сидеть за обоими Jinja2 и Django, заменив существующую инфраструктуру, но сохраняя обратную совместимость. https://www.djangoproject.com/weblog/2011/apr/25/gsoc/

Ответ 7

re: отсутствие {% spaceless %} в jinja2, проверьте jinja2htmlcompress модуль:

# In shell:
fetch -o myapp/jinja2htmlcompress.py https://raw.github.com/mitsuhiko/jinja2-htmlcompress/master/jinja2htmlcompress.py

# In your app:
app = Flask(__name__, static_path='/static')
app.config.from_object('myapp.default_settings')
app.jinja_env.add_extension('myapp.jinja2htmlcompress.HTMLCompress')

Ответ 8

В апреле 2015 года Django 1.8 поддерживает создание шаблонов с несколькими двигателями в рамках одного и того же проекта и имеет встроенная поддержка Jinja2. Таким образом, это не должно быть решением "все или ничего".

(Хотя это напрямую не отвечает на вопрос, так как это было раньше, я думал, что это заслуживает большего, чем просто комментарий).

Ответ 9

У меня возникли проблемы с хрустящими формами для работы с Jinja2. Однако есть довольно простой способ решить эту проблему.

django хрустящие формы с jinja2

Я думаю, что в целом недостаток, скорее всего, будет аналогичным часто используемым пакетам Django, которые просто не играют с Jinja2