Je préfère personnellement la syntaxe de Jinja2 à celle de Mako. Prenons l'exemple suivant, tiré de la page Site web de 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>
Il y a tellement de constructions que je devrais consulter la documentation avant de pouvoir commencer. Quelles sont les balises qui commencent par <%
et terminez par />
? Quels sont ceux qui peuvent être clôturés par %>
? Pourquoi y a-t-il encore une autre façon d'entrer dans la langue du modèle lorsque je veux sortir une variable ( ${foo}
) ? Qu'est-ce que c'est que ce faux XML où certaines directives se ferment comme des balises et ont des attributs ?
Voici l'exemple équivalent dans 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 dispose de filtres, dont on m'a dit que Mako disposait également, mais je ne les ai pas vus. Les fonctions de filtrage n'agissent pas comme des fonctions normales, elles prennent un premier paramètre implicite de la valeur à filtrer. Ainsi, dans Mako, vous pourriez écrire :
${escape(default(get_name(user), "No Name"))}
C'est horrible. Dans Jinja2, vous écririez :
{{ user | get_name | default('No Name') | escape }}
À mon avis, les exemples de Jinja2 sont beaucoup plus lisibles. Jinja2 est plus régulier, en ce sens que les balises commencent et se terminent d'une manière prévisible, soit avec {% %}
pour les directives de traitement et de contrôle, ou {{ }}
pour l'édition de variables.
Mais il s'agit là de préférences personnelles. Je ne connais pas de raison plus importante de choisir Jinja2 plutôt que Mako ou vice-versa. Et Pylons est suffisamment bon pour que vous puissiez utiliser l'un ou l'autre !
Mise à jour les macros Jinja2 incluses. Bien qu'il soit artificiel, l'exemple de Jinja2 est à mon avis plus facile à lire et à comprendre. La philosophie de Mako est la suivante : "Python est un excellent langage de script. Ne réinventez pas la roue... vos templates peuvent s'en charger !" Mais les macros de Jinja2 (tout le langage, en fait) ressemblent plus à Python que celles de Mako !