Как стать автором
Обновить

Комментарии 19

НЛО прилетело и опубликовало эту надпись здесь
Пробежался по документации — не могу найти, поддерживается ли наследование шаблонов? Это очень важно.
Поддерживается, jinja.pocoo.org/2/documentation/templates#id5
Вижу, спасибо. Попробую как-нибудь…
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Отличная статья, спасибо! Пожалуй, нужно попробовать и jinja.

...pain in the ass if you want to profile Django
Тут я согласен. Посмотрел графики и ужаснулся :-)

Я обращаю внимание на производительность потому, что разрабатываю проект, в котором скорость работы шаблонизатора будет очень критична. Для большинства задач хватит и стандартных шаблонов Django.

А насчет настроены/не настроены — за пару дней перепробовал 5 шаблонизаторов и XSLT. Ни с одним проблем не возникло. Подключаются в три строчки.
Продолжение — Jinja

C большим трудом настроил в итоге совместную работу Django и Jinja (оказалось, что в текущий релиз забыли включить директорию contrib со всеми файлами).

Работает очень быстро, выглядит вполне приятно. Особенно нравятся такие конструкции:
{% for type in types if type.parent_id == parent_id -%}
    что-то там
{% endfor -%}
Наследование поддерживается без всяких приключений с компиляцией.

Но не могу сделать две вещи: закешировать часть шаблона и присвоить переменной значение. Если я что-то не дочитал в документации и эти возможности в Jinja есть — подскажите, как они работают?
НЛО прилетело и опубликовало эту надпись здесь
Говоря про автоматическую компиляцию — я, когда начинал писать препроцессор подмножества HAML в шаблоны Django(увы, так и не дописал), написал свой загрузчик шаблонов, являющийся оберткой для django.template.loaders.app_directories. Думаю, это самый простой метод.
У читы есть одна проблема — код выглядит как гавно.
А у кого лучше?
НЛО прилетело и опубликовало эту надпись здесь
Вот несколько примеров:
{# 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>
}
Мне кажется, все они одинаково ужасны. Спасти могут только правильная среда разработки и подсветка синтаксиса. Или XSLT.
НЛО прилетело и опубликовало эту надпись здесь
Тру XML очень уж медленно работает. В восемь раз медленнее Cheetah.

В других:
{# 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}
Опять же, всё дело в привычке и правильной подсветке. Из всех вариантов мне наиболее приятен Parser.
долгое время работал с Zope, поэтому, после небольшого освоения django нашел simpletemplate (мануал) — теперь и в django юзаю TAL, имхо, удобнее стандартного шаблона
обычно, удобство — всего лишь дело привычки.
Недавно наткнулся на 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.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории