Какие-либо недостатки или недостатки использования шаблонов Jinja2 в Django? - PullRequest
23 голосов
/ 07 января 2009

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

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

Ответы [ 9 ]

13 голосов
/ 06 февраля 2009

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

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

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

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

5 голосов
/ 18 марта 2009
5 голосов
/ 07 января 2009

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

3 голосов
/ 23 января 2009

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

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

2 голосов
/ 06 января 2010

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

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

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

1 голос
/ 28 июня 2015

Как и в апреле 2015 года, Django 1.8 поддерживает шаблоны рендеринга с несколькими движками в одном проекте и имеет встроенную поддержку Jinja2 . Так что это больше не должно быть решением «все или ничего».

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

1 голос
/ 27 сентября 2011

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')
1 голос
/ 26 сентября 2011

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

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

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

0 голосов
/ 21 июля 2017

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

хрустящие джанго формы с дзиндзя2

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

...