Я не нашел хорошее сравнение jinja2 и Мако. Что Вы использовали бы для какой задачи?
Я personnaly был удовлетворен акулой-мако (в контексте веб-приложения опор), но любопытен знать, имеет ли jinja2 некоторые хорошие функции/улучшения, которые не делает акула-мако? - или возможно оборотные стороны? -
Лично я предпочитаю синтаксис Jinja2 синтаксису Мако. Возьмем этот пример с сайта Mako
<%inherit file="base.html"/>
<%
rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
% for row in rows:
${makerow(row)}
% endfor
</table>
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>\
% endfor
</tr>
</%def>
Здесь так много конструкций, что мне пришлось бы проконсультироваться с документацией, прежде чем я смогу даже начать. Какие теги начинаются с <%
и заканчиваются на />
? Какие из них могут закрываться с помощью %>
? Почему есть еще один способ ввести язык шаблонов, когда я хочу вывести переменную ( $ {foo}
)? Что с этим faux XML, где некоторые директивы закрываются, как теги, и имеют атрибуты?
Это эквивалентный пример в Jinja2:
{% extends "base.html" %}
<table>
{% for row in rows %}
{{ makerow(row) }}
{% endfor %}
</table>
{% macro make_row(row) %}
<tr>
{% for name in row %}
<td>{{ name }}</td>
{% endfor %}
</tr>
{% endmacro %}
В Jinja2 есть фильтры, которые, как мне сказали, есть у Мако, но я ' я их не видел.Функции фильтрации не действуют как обычные функции, они принимают неявный первый параметр фильтруемого значения. Таким образом, в Mako вы можете написать:
${escape(default(get_name(user), "No Name"))}
Это ужасно. В Jinja2 вы бы написали:
{{ user | get_name | default('No Name') | escape }}
На мой взгляд, примеры Jinja2 более читабельны. Jinja2 более регулярен, поскольку теги начинаются и заканчиваются предсказуемым образом: либо {%%}
для директив обработки и управления, либо {{}}
для вывода переменных.
Но это все личные предпочтения. Я не знаю еще одной веской причины выбрать Jinja2 вместо Mako или наоборот. И Pylons достаточно хороши, чтобы вы могли их использовать!
Обновление включает макросы Jinja2. Хотя пример Jinja2 в любом случае надуманный, на мой взгляд, его легче читать и понимать. Руководящая философия Mako: «Python - отличный язык сценариев. Не изобретайте велосипед ... ваши шаблоны справятся с этим!» Но макросы Jinja2 (на самом деле весь язык) больше похожи на Python, чем на Mako!