Gibt es einen Grund, warum ich aus der Verwendung eines alternativen Template-Engine in meiner Django app werden abbringen sollte?

StackOverflow https://stackoverflow.com/questions/4241871

Frage

Ich habe ein paar kleine ish Django Projekte gemacht, und jedes Mal habe ich durch die scheinbaren Grenzen der Djangos Template-Sprache geschlagen worden. So wie ein willkürliches Beispiel, war ich schockiert zu erfahren, dass, wenn im Rahmen einer Vorlage, ich eine Variable Bar hatte und ein dict foo, ich konnte keinen Zugang foo [bar], wenn ich meine eigenen Filter schrieb, es zu tun.

Ich habe gelesen, dass der Grund dafür ist, dass Django für Umgebungen geschaffen wurde, wo die Leute die Seiten der Gestaltung waren keine Programmierer. Ich verstehe das.

Aber lassen Sie uns sagen, das ist kein Problem für mich. Warum gibt es einen Grund, warum ich soll mit Djangos Template-Sprache bleiben, anstatt Umschalten auf etwas mit viel mehr Macht, wie Mako (wo man auch beliebige Python-Ausdrücke ausführen kann)?

hatte ich die Gelegenheit Mako zu nutzen für ein Schulprojekt einer Weile zurück, und ich liebte wirklich die Kraft davon. Zum Beispiel im Rahmen des Projektes mussten wir einen großen Tisch machen, wo jede Zeile Aufbau und Zelle war ziemlich komplex. Dennoch konnte ich meine Vorlage Blick etwas wie machen:

<table>
    % for foo in foos:
        ${makerow(row)}
    % endfor
</table>

<%def name="makerow(row)">
    <tr>
        # Blah blah blah (possibly a call to makecell somewhere)
    </tr>
</%def>

Vielleicht ist dies eine Verletzung der Trennung von Darstellung und Logik, aber Junge ist es schön und sauber. Subroutinen! Abstraktion! Good stuff.

Und eine weitere Frage: Wenn eine alternative Template-Sprache verwendet, ist nicht verpönt von der Gemeinschaft Django, hat jemand irgendwelche vorschlagen? Wie ich schon sagte, ich mag Mako, aber es ist buchstäblich die einzige, die ich verwendet habe andere als Djangos.

War es hilfreich?

Lösung

Ich werde ehrlich sein, habe ich nicht gründlich die Antworten lesen. Aber ich vermute, es ist eine Menge „keine Python in Ihre Vorlagen“ ist und „Ihrer Ansicht nach sollte nicht viel Logik“ Art Zeug.

Wenn Sie Idealismus auf die Seite legen und entscheiden sich für Pragmatismus dann denke ich, Mako ist eine gute Wahl. Ich verwende es in einer Produktionskapazität (hauptsächlich für Geschwindigkeit, Kraft und dynamische Vererbung) für 3+ Jahre. Es hat nicht versagt oder in irgendeiner Weise anders ärgerlich gewesen.

Die Idealisten sind richtig, aber manchmal müssen Sie gehen, was machbar ist vs was richtig ist. Wenn Sie nicht von der Django Template-Engine verwenden sie beschränkt. Wenn Sie mehr Leistung benötigen, Mako und Jinja sind feine Auswahl.

Django macht es sehr einfach zu tauschen Templating Motoren und die meisten Dinge weiter arbeiten wie bisher: http: //docs.djangoproject. com / de / dev / ref / templates / api / # using-an-Alternative-Template-Sprache

Andere Tipps

Ausführen von beliebigem Code in Vorlagen soll nicht von Natur aus guter Sache angesehen werden. Vorteil einer solchen Funktionalität zu nehmen ist in der Regel ein Zeichen dafür, dass Ihre Architektur gebrochen wird.

Das heißt, wenn Sie die Django-Dokumentation zu lesen, es explizit sagt, dass Sie sich frei fühlen sollte zu verwenden, zu verwerfen, und ersetzen Sie alle Komponenten, die Sie wünschen. Django ist bewusst modular aufgebaut, und in der Tat, die beiden trivialen austauschbaren Komponenten sind die Template-Engine und die ORM.

Wenn Sie Mako verwenden anstelle der Django Template-Engine wollen, nur Mako verwenden.

Der einzige Grund, warum ich von der Verwendung jinja verzichten würde, Mako oder irgendetwas anderes ist, dass es nicht Ihre App zukunftssicher mit django Verbesserungen machen kann.

Es war ein GSOC Projektvorschlag im vergangenen Jahr von Alex Gaynor schnell die Vorlage Laden zu machen. -. Es wurde dann für NoSQL Projekt zurückgezogen

Aber mit viel mehr Kernentwicklern und schnelleren Karten zu löschen, würde ich Stick volle Stapel django, voll gut zu wissen, dass Komponenten von home grown diejenigen geändert werden müssen schließlich.

Wenn Sie wirklich für einen Klebstoff Rahmen auf ehrfürchtige Python-Bibliotheken suchen, einschließlich die, die Sie wählen, Flask ist da draußen .

addons.mozilla.org wird mit Django + Jinga: https://github.com/jbalogh/zamboni

Nicht sicher, ob die Gemeinde runzelt die Stirn auf Jinga, aber viele Leute mögen es, als Beispiel.

Wenn Sie mean „app“ tun, sondern als „Projekt“, und es ist nicht für ganz privaten Gebrauch, würde ich empfehlen, dass Sie die Template-Engine ändern; es wird die App viel weniger wahrscheinlich machen, jemals von jemand anderem verwendet werden, wie es sie benötigen werden einige Kerneinstellungen zu verändern, und es kann Interaktion zwischen ihm und anderen Apps oder das Projekt als Ganzes brechen.

Ihr Beispiel erinnert mich an den alten Zeiten PHP, wenn Menschen mit PHP mischen würden html ganz über den Platz. Felt wirklich mächtig. Bis eines Tages die Menschen erkannt, dass das Chaos ist wartbaren.

Wenn das Design bis in den „Funktionen“ gehackt wird, wird ein Designer versteht es dann? Es wird ihn wahrscheinlich ärgern.

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