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 ?-
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?
{% 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.
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!
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.
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