Frage

Ich habe nicht einen guten Vergleich von jinja2 und Mako finden. Was würden Sie für welche Aufgaben verwenden?

Ich war personnaly von mako erfüllt ist (in einer Pylone Web-App-Kontext), aber ich bin neugierig, ob jinja2 einige nette Features / Verbesserungen hat, dass mako nicht? -oder vielleicht Nachteile -?

War es hilfreich?

Lösung

Ich persönlich bevor Jinja2 Syntax über Makos. Nehmen Sie dieses Beispiel aus der Mako Website

<%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>

Es gibt so viele Konstrukte hier, dass ich zu der Dokumentation konsultieren, bevor ich könnte sogar beginnen. Welche Tags beginnen wie <% und schließen mit />? Welche davon sind erlaubt mit %> zu schließen? Warum gibt es noch eine andere Möglichkeit, die Template-Sprache einzugeben, wenn ich die Ausgabe eine Variable (${foo}) will? Was ist mit diesem faux XML, wo einige Richtlinien schließen wie Tags und Attribute haben?

Dies ist das Äquivalent Beispiel in 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 hat Filter, die mir gesagt Mako auch hat, aber ich habe sie nicht gesehen. Filterfunktionen wirken nicht wie normale Funktionen, nehmen sie einen impliziten ersten Parameter des Wert gefiltert. So in Mako könnten Sie schreiben:

${escape(default(get_name(user), "No Name"))}

Das ist schrecklich. In Jinja2 würden Sie schreiben:

{{ user | get_name | default('No Name') | escape }}

Meiner Meinung nach sind die Jinja2 Beispiele außerordentlich besser lesbar. Jinja2 ist regelmäßiger, dass Tags beginnen und enden in einer vorhersagbaren Art und Weise, entweder mit {% %} für die Verarbeitung und Steuerrichtlinien oder {{ }} für Variablen ausgegeben werden.

Aber diese sind alle persönlichen Vorlieben. Ich weiß nicht, von einem wesentlichere Grund Jinja2 über Mako oder umgekehrt zu holen. Und Pylons ist groß genug, dass man entweder verwenden können!

Aktualisieren enthalten Jinja2 Makros. Obwohl in jedem Fall ersonnen, meiner Meinung nach ist das Jinja2 Beispiel leichter zu lesen und zu verstehen. Makos Leitidee ist „Python ist eine große Skriptsprache. Sie das Rad nicht neu erfinden ... Ihre Vorlagen können damit umgehen!“ Aber Jinja2 des Makros (die gesamte Sprache, tatsächlich) aussieht wie Python, dass Mako tut!

Andere Tipps

Hier finden Sie aktuelle wheezy.template Beispiel:

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

Es ist optimiert für Leistung (mehr hier und hier ), gut getestet und dokumentiert .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top