Сравнение шаблонов web.py и Jinja2: сильные и слабые стороны

1

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

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

Хотя я только создаю (несовместимые;) уродливые HTML-страницы сейчас, я также использую механизм шаблонов для создания писем и старых старых текстовых файлов.

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

Теги:
templates
jinja2
web.py

2 ответа

4
Лучший ответ

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

Мако и Джинджа поддерживают:

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

Хотя Mako и Templator поддерживают:

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

Все три поддержки:

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

Templator поддерживает на странную вещь, что я не верю ни в Jinja или Mako:

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

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

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

  • 2
    Jinja2 предоставляет [песочницу] [ jinja.pocoo.org/docs/sandbox/], которая позволяет выполнять ненадежный код.
  • 0
    @Daslch - Абсолютно верно! Причина, по которой я сделал различие между Jinja и Mako, заключается в том, что (как мне кажется) как в Sandbox, так и в нормальных режимах Jinja2 не рассматривает любой код шаблона как код Python - каждая конструкция в шаблоне Jinja является конструкцией Jinja - даже если она выглядит как выражение или выражение Python. С другой стороны, Mako и Templator фактически проходят через строки, которые они считают «безопасными» для интерпретатора Python напрямую.
1

Что мне было трудно в Templetor, это наследование шаблонов. Вместо простой концепции блоков, которая присутствует, например, в Jinja2, вам нужно выбрать базовый шаблон один раз в коде приложения, а затем выполнить настройку weird атрибута в фактическом шаблоне, обратившись к нему в базовом шаблоне. Тем не менее у вас проблемы, если вам нужно больше, чем один "большой" блок, такой как тело страницы.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню