Вопрос

Я не нашел хорошего сравнения 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

Он оптимизирован для представление (более здесь а также здесь), хорошо тестировано а также документированный.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top