Mako или Jinja2? [закрыто
-
26-09-2019 - |
Вопрос
Я не нашел хорошего сравнения Jinja2 и Mako. Что бы вы использовали для каких задач?
I Personaly была удовлетворена MAKO (в контексте веб-приложения Pylons), но мне интересно, если у Jinja2 есть хорошие функции / улучшения, которые Mako нет? - Может быть, нисходящие? -
Решение
Я лично предпочитаю синтаксис 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}
)? Что с этим искусственный 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 есть фильтры, которые мне сказали, что в Мако также есть, но я их не видел. Функции фильтра не действуют как обычные функции, они принимают неявный первый параметр отфильтрованного значения. Таким образом, в Мако вы можете написать:
${escape(default(get_name(user), "No Name"))}
Это ужасно. В Jinja2 вы бы написали:
{{ user | get_name | default('No Name') | escape }}
На мой взгляд, примеры Jinja2 чрезвычайно читаются. Jinja2 более регулярно, в этих тегах начинаются и заканчиваются предсказуемым образом либо с {% %}
для обработки и контрольных директив или {{ }}
Для вывода переменных.
Но это все личные предпочтения. Я не знаю одной существенной причины, чтобы выбрать jinja2 над Мако или наоборот. И пилоны достаточно велики, чтобы вы могли либо использовать!
Обновлять Включены Macros Jinja2. Хотя придумал в любом случае, на мой взгляд, пример Jinja2 легче читать и понимать. Руководящая философия Мако - «Python - отличный язык сценариев. Не изобретайте колесо ... ваши шаблоны могут справиться с этим!» Но макросы Jinja2 (весь язык, на самом деле) выглядят больше похожи на Python, что делает Mako!
Другие советы
Взгляни на Reezy.template. пример:
@require(user, items)
Welcome, @user.name!
@if items:
@for i in items:
@i.name: @i.price!s.
@end
@else:
No items found.
@end
Он оптимизирован для представление (более здесь а также здесь), хорошо тестировано а также документированный.