Мако или Jinja2? [закрытый]

Я не нашел хорошее сравнение jinja2 и Мако. Что Вы использовали бы для какой задачи?

Я personnaly был удовлетворен акулой-мако (в контексте веб-приложения опор), но любопытен знать, имеет ли jinja2 некоторые хорошие функции/улучшения, которые не делает акула-мако? - или возможно оборотные стороны? -

47
задан earl 8 August 2010 в 20:37
поделиться

1 ответ

Лично я предпочитаю синтаксис 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!

41
ответ дан 26 November 2019 в 19:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: