Mako czy Jinja2? [zamknięte]

Nie znalazłem dobrego porównania jinja2 i Mako. Czego byś użył do jakich zadań ?

Byłem usatysfakcjonowany przez mako (w kontekście aplikacji pylons), ale jestem ciekaw, czy jinja2 ma jakieś fajne funkcje/ulepszenia, których mako nie ma ? - a może minusy ?-

Author: earl, 2010-08-09

2 answers

Osobiście wolę składnię Jinja2 niż Mako. Weźmy ten przykład ze strony 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>

Jest tu tak wiele konstrukcji, że musiałbym przejrzeć dokumentację, zanim mógłbym w ogóle zacząć. Które znaczniki zaczynają się od <% i kończą na />? Które z nich mogą zamknąć %>? Dlaczego jest jeszcze inny sposób, aby wprowadzić język szablonu, gdy chcę wypisać zmienną (${foo})? O co chodzi z tym faux XML gdzie niektóre dyrektywy Zamknij jak tagi i mieć atrybuty?

Jest to przykład równoważny w 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 ma filtry, które podobno Mako też ma, ale ich nie widziałem. Funkcje filtrujące nie działają jak zwykłe funkcje, przyjmują pierwszy parametr filtrowanej wartości. Tak w Mako można napisać:

${escape(default(get_name(user), "No Name"))}
To straszne. W Jinja2 napisałbyś:
{{ user | get_name | default('No Name') | escape }}

Moim zdaniem przykłady Jinja2 są niezwykle czytelne. Więcej Jinja2 zwykłe, W tym znaczniki rozpoczynają się i kończą w przewidywalny sposób, albo z {% %} dla dyrektyw przetwarzania i kontroli, albo {{ }} dla wyprowadzania zmiennych.

Ale to są osobiste preferencje. Nie znam jeszcze jednego istotnego powodu, aby wybrać Jinja2 zamiast Mako lub vice-versa. A pylony są na tyle duże,że możesz ich użyć!

Aktualizacja zawiera makra Jinja2. Chociaż w każdym razie wymyślony, moim zdaniem przykład Jinja2 jest łatwiejszy do odczytania i zrozumienia. Filozofia Mako brzmi: "Python jest świetnym językiem skryptowym. Nie odkrywaj koła na nowo...Twoje szablony sobie z tym poradzą!"Ale makra Jinja2 (właściwie cały język) wyglądają bardziej jak Python, który robi Mako!

 40
Author: Jesse Dhillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-21 03:49:25

Spójrz na wheezy.szablon Przykład:

@require(user, items)
Welcome, @user.name!
@if items:
    @for i in items:
        @i.name: @i.price!s.
    @end
@else:
    No items found.
@end

Jest zoptymalizowany pod kątem wydajności (więcej tutaj i tutaj), dobrze Przetestowane i udokumentowane.

 5
Author: Python Best Friend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-12 10:58:22