Сравнение шаблонов web.py и Jinja2: сильные и слабые стороны - PullRequest
1 голос
/ 30 августа 2011

Я добавляю простой веб-интерфейс к уже существующему программному обеспечению;web.py идеально подходит для работы, и это то, что я использую.Сейчас я изучаю, какой шаблонизатор использовать, и пришел к двум альтернативам: либо с помощью собственного Templator в web.py, либо с помощью Jinja2.

У меня уже есть оба в приложении, и я пишу несколько очень простыхшаблоны в обоих, чтобы изучить их.Должен сказать, что я считаю, что Templator легче читать, возможно, это из-за того, что я программист, а не веб-дизайнер (кто, вероятно, посчитает Jinja более простым?)Теперь уродливые HTML-страницы, я также буду использовать шаблонизатор для генерации электронных писем и старых добрых текстовых файлов.

Оба программного обеспечения "достаточно быстры" для любых практических целей, я хотел бы спросить людей, которыев той или иной степени, каковы их сильные и слабые стороны в области простоты использования, чистоты кода, гибкости и т. д.

Ответы [ 2 ]

4 голосов
/ 30 августа 2011

Взглянув на Templator (который я никогда не использовал) и сравнив его с Jinja2 (который я использовал довольно широко), я бы сказал, что обадовольно похоже ... но Templator ближе к Mako , чем к Jinja.

Mako и Jinja оба поддерживают:

  • Наследование шаблонов (Вы можете иметьмакет, от которого наследуются все ваши страницы)
  • Управление пробелами

В то время как Mako и Templator поддерживают:

  • Встраивание "безопасного" Python в ваши шаблоны.

Все три поддерживают:

  • Добавление в контекст шаблона (функции, объекты, переменные, работы)
  • Определение функций для инкапсуляции многоразового использованияэлементы функциональности в ваших шаблонах (Джинджа называет их «макросами».)
  • Условные выражения и циклы
  • Установка и получение локальных переменных.
  • Оценка выражений
  • Кэширование скомпилированного байт-кода для ускорения выполнения в будущем.n.

Templator поддерживает странные вещи, в которые, как я не верю, ни Джинджа, ни Мако:

  • Установка атрибутов для объекта скомпилированного шаблона из кода шаблона.(Честно говоря, использование этой функции на самом деле кажется неправильным. Любые флаги, которые может определить ваш шаблон, должны быть установлены из того, что было передано контекстом, уже должно быть установленным вашимкод приложения.)

Джинджа берет код шаблона и компилирует его в байт-код Python, но он делает это для всего, вместо того, чтобы передавать через интерпретатор Python строки через safe_eval.При этом Jinja2 теоретически невосприимчив к определенным типам атак на уровне шаблонов (но когда у вас есть враждебный вклад от ваших шаблонов, у вас, как правило, гораздо большая проблема).

Что касается остального, то всев значительной степени зависит от ваших предпочтений синтаксиса.

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

В Templetor мне было тяжело наследовать шаблоны. Вместо простого понятия блоков , которое присутствует, например. в Jinja2 вы должны один раз выбрать базовый шаблон в коде приложения, а затем выполнить странную настройку атрибута в реальном шаблоне, одновременно обращаясь к нему в базовом шаблоне. Тем не менее, у вас есть проблемы, если вам нужно более одного «большого» блока, такого как тело страницы.

Реальные блоки намного элегантнее, и гибкость «реального» Python Templetor на самом деле не нужна, хотя, вероятно, это может быть небезопасно.

...