Комментарии 19
Пробежался по документации — не могу найти, поддерживается ли наследование шаблонов? Это очень важно.
Поддерживается, jinja.pocoo.org/2/documentation/templates#id5
Вижу, спасибо. Попробую как-нибудь…
Отличная статья, спасибо! Пожалуй, нужно попробовать и jinja.
Я обращаю внимание на производительность потому, что разрабатываю проект, в котором скорость работы шаблонизатора будет очень критична. Для большинства задач хватит и стандартных шаблонов Django.
А насчет настроены/не настроены — за пару дней перепробовал 5 шаблонизаторов и XSLT. Ни с одним проблем не возникло. Подключаются в три строчки.
...pain in the ass if you want to profile DjangoТут я согласен. Посмотрел графики и ужаснулся :-)
Я обращаю внимание на производительность потому, что разрабатываю проект, в котором скорость работы шаблонизатора будет очень критична. Для большинства задач хватит и стандартных шаблонов Django.
А насчет настроены/не настроены — за пару дней перепробовал 5 шаблонизаторов и XSLT. Ни с одним проблем не возникло. Подключаются в три строчки.
Продолжение — Jinja
C большим трудом настроил в итоге совместную работу Django и Jinja (оказалось, что в текущий релиз забыли включить директорию contrib со всеми файлами).
Работает очень быстро, выглядит вполне приятно. Особенно нравятся такие конструкции:
Но не могу сделать две вещи: закешировать часть шаблона и присвоить переменной значение. Если я что-то не дочитал в документации и эти возможности в Jinja есть — подскажите, как они работают?
C большим трудом настроил в итоге совместную работу Django и Jinja (оказалось, что в текущий релиз забыли включить директорию contrib со всеми файлами).
Работает очень быстро, выглядит вполне приятно. Особенно нравятся такие конструкции:
Наследование поддерживается без всяких приключений с компиляцией.{% for type in types if type.parent_id == parent_id -%} что-то там {% endfor -%}
Но не могу сделать две вещи: закешировать часть шаблона и присвоить переменной значение. Если я что-то не дочитал в документации и эти возможности в Jinja есть — подскажите, как они работают?
Говоря про автоматическую компиляцию — я, когда начинал писать препроцессор подмножества HAML в шаблоны Django(увы, так и не дописал), написал свой загрузчик шаблонов, являющийся оберткой для django.template.loaders.app_directories. Думаю, это самый простой метод.
У читы есть одна проблема — код выглядит как гавно.
А у кого лучше?
Вот несколько примеров:
Мне кажется, все они одинаково ужасны. Спасти могут только правильная среда разработки и подсветка синтаксиса. Или XSLT.{# Django, Jinja #} {% for item in item_list %} <li>{{ item }}</li> {% endfor %} # PSP-style <%= for item in item_list %> <li><% item %></li> <%= endfor %> # Cheetah (mod) ^for $item in $item_list <li>$item</li> ^end for ## Mako % for item in item_list: <li>${item}</li> % endfor # Parser ^for[item](0;10){ <li>$item</li> }
Тру XML очень уж медленно работает. В восемь раз медленнее Cheetah.
В других:
В других:
Опять же, всё дело в привычке и правильной подсветке. Из всех вариантов мне наиболее приятен Parser.{# Django, Jinja #} Html{% if condition %} condition text{% endif %} # PSP-style Html<%= if condition %> condition text<%= endif %> # Cheetah (mod) Html^if $condition& condition text^end if& ## Mako Html % if condition: condition text % endif # Parser Html^if(condition){ condition text}
Недавно наткнулся на Spitfire: code.google.com/p/spitfire/
По описанию, урезанный Cheetah. И сильно быстрее.
Вот тесты: stackoverflow.com/questions/1324238/what-is-the-fastest-template-system-for-python
А тут отличия от Cheetah: code.google.com/p/spitfire/wiki/SpitfireVsCheetah
Интересно твоё мнение в свете опыта с Cheetah.
По описанию, урезанный Cheetah. И сильно быстрее.
Вот тесты: stackoverflow.com/questions/1324238/what-is-the-fastest-template-system-for-python
А тут отличия от Cheetah: code.google.com/p/spitfire/wiki/SpitfireVsCheetah
Интересно твоё мнение в свете опыта с Cheetah.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование шаблонов Cheetah совместно с Django