Dieser Artikel ist der 16. Tagesartikel des Django Adventskalenders 2016.
Einfach gesagt, es ist eine Python-Template-Engine. Offizielle Seite: http://jinja.pocoo.org/ Inspiriert von Djangos Template-Engine sieht es genauso aus wie Djangos Standard-Template-Engine. Jinja2 ist funktionsreicher als die Vorlagen-Engine von Django und kann für andere Zwecke wie LaTex und E-Mail anstelle einer Vorlagen-Engine zum Schreiben von HTML und XML verwendet werden.
Offiziell unterstützt seit Django 1.8. (Installation der Bibliothek ist erforderlich)
Übrigens ist der Ursprung des Namens "Wenn Sie den Schrein ins Englische übersetzen, haben Tempel, Vorlage und Tempel ähnliche Aussprachen → Es scheint Jinja zu sein" w
Ich bin neu in Django, daher habe ich Jinja2 noch nie mit Django verwendet und gefragt, ob ich vorerst die Standardvorlagen-Engine verwenden soll. Ich habe es in Andere Verwendungen verwendet (es tut mir leid für meinen Artikel w), aber ich habe nichts Besonderes getan, deshalb habe ich die Dokumentation so oft gelesen. Es gibt keine solche Sache.
~~ Rails ist eher an die Entwicklung von Webframeworks gewöhnt als an Django, daher möchte ich Ruby Slim unbedingt verwenden. ~~ Es gibt eine bequemere Template-Engine, um die Entwicklung zu vereinfachen. Ich wollte es wenn möglich verwenden, also entschied ich mich diesmal, Jinja2 zu untersuchen und mich auf die Verwendung in Django zu konzentrieren.
Es scheint, dass Django auch eine schlanke Template-Engine hat, aber ich habe sie gestoppt, weil es nur wenige Informationen gibt und es schwierig zu sein scheint, nachzuschlagen.
** Dieser Artikel beschreibt nur Dinge, die mit Django zu tun haben, daher werde ich andere Verwendungszwecke nicht behandeln. ** **.
Das Ersetzen der Django-Vorlage durch Jinja2 schien schwierig zu sein, daher habe ich diesmal nur einen kleinen Teil des vorhandenen Projekts durch einen Test ersetzt. Wie ich im nächsten Einführungsartikel schreiben werde, wurden die Standardvorlagen-Engine und Jinja2 in einem Projekt gemischt. ** Python 3.3 und höher scheint nicht vollständig unterstützt zu werden **, daher sollten Sie vorsichtig sein, wenn Sie 3.4 oder höher verwenden. Da der Test selbst bestanden wurde, werden es auch kleine Fehler sein, selbst wenn es Fehler gibt. http://jinja.pocoo.org/docs/dev/intro/#experimental-python-3-support
Schreiben Sie TEMPLATE in Djangos settings.py wie folgt neu. Standardmäßig sucht Jinja2 im jinja2-Verzeichnis nach Vorlagendateien, sodass das Wechseln zu Jinja2 nur für "BACKEND" im normalen Zustand nicht funktioniert. Es scheint notwendig zu sein, den Namen des Vorlagenverzeichnisses jeder Anwendung in jinja2 zu ändern oder ihn explizit mit "DIRS" anzugeben. Im folgenden Beispiel wird die Jinja2-Einstellung zur üblichen (?) Einstellung hinzugefügt.
In meiner lokalen Entwicklungsumgebung habe ich django_debug_toolbar usw. eingefügt, aber um den Pfad zu den Vorlagen dieser Bibliotheken zu übergeben, musste ich auch die üblichen Vorlageneinstellungen vornehmen. In einer Produktionsumgebung werden diese Bibliotheken nicht verwendet, und es werden (wahrscheinlich) nur die von ihnen definierten Vorlagen verwendet, sodass anscheinend nur die Jinja2-Einstellungen ausreichen.
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2',
'DIRS': [os.path.join(BASE_DIR, 'templates/jinja2')],
'APP_DIRS': True,
},
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Die Dokumentation ist umfangreich, aber es gibt viele Teile, die für die Verwendung als Django-Vorlagen-Engine nicht relevant sind. Daher können Sie vorerst anhand der folgenden URL sehen, was Sie tun können. http://jinja.pocoo.org/docs/dev/templates/#synopsis
Obwohl es Django Inspire heißt, gibt es viele Unterschiede in den detaillierten Spezifikationen, daher werde ich nur die Hauptunterschiede vorstellen.
Mit JinJa2 können Sie die Verarbeitung wie Python sogar auf eine Vorlage schreiben.
Wie unten gezeigt, hat Django nicht (), aber Jinja2 fügt () hinzu.
Django: {% for page in user.get_created_pages %}
Jinja2: {% for page in user.get_created_pages() %}
Dank dessen ist es möglich, order_by auf der Vorlagenseite zum Django-Modell hinzuzufügen. Ich finde es jedoch nicht cool, eine solche Beschreibung auf der Vorlagenseite zusammenzufassen.
http://jinja.pocoo.org/docs/dev/templates/#macros Wenn Sie in Django etwas anderes als die von Anfang an für die Vorlage bereitgestellte Verarbeitung ausführen möchten, haben Sie wahrscheinlich Ihr eigenes Vorlagen-Tag definiert, aber in Jinja2 definieren Sie es mithilfe eines so genannten Makros. Das in der Vorlage definierte Makro kann per Aufruf wiederverwendet werden. Ich werde die Details weglassen w
http://jinja.pocoo.org/docs/dev/templates/#list-of-builtin-filters Es gibt überraschend viele Filter. Es ist ein Eindruck, dass Sie Methoden verwenden können oder haben, die für jedes der Python-Arrays, Zeichenfolgen und numerischen Objekte verwendet werden können.
http://jinja.pocoo.org/docs/dev/templates/#math Ich verwende django-mathfilter, wenn ich mit Django vier Regeln für eine Vorlage ausführen möchte, aber Jinja2 scheint sie nicht zu benötigen. Es ist nüchtern, aber ich bin glücklich. Es gibt auch viele Vergleichsoperatoren.
Es ist überwältigend einfacher als das Erstellen und Verwenden von Vorlagen-Tags selbst.
Zum Beispiel, wenn Sie die folgenden Variablen in einer Vorlage anzeigen möchten
foo = {"bar": 1}
Für Djangos Standardvorlage
foo.bar
Daher können Sie nicht "foo [" bar "]" schreiben, aber im Fall von Jinja2 können Sie auch "foo [" bar "]" verwenden. Ich bin auch glücklich, weil es sich immer seltsam anfühlte, mit Punkten auf diktierte Variablen zuzugreifen.
http://qiita.com/ryu22e/items/e50f8a3fbd6fe836c1b4 Ich werde es nicht schreiben, weil einige Leute den Artikel bereits geschrieben haben. Ich denke, dass context_processor auf die Standardvorlagen-Engine von Django anwendbar ist, aber ich bin mir nicht sicher, ob die Möglichkeit, globale Variablen festzulegen, der Vorteil von Jinja2 ist, da ich es nie selbst gemacht habe.
Es hat mehr Funktionen als ich erwartet hatte und es ist ein grober Artikel geworden.
Es ist sehr vielseitig und ich möchte es sofort verwenden, aber obwohl es Django Inspire heißt, gibt es viele kleine Unterschiede, und ich hatte den Eindruck, dass das Ersetzen eines vorhandenen Projekts durch Jinja2 etwas ärgerlich erscheint. Beim Umschalten auf Slim mit Rails gibt es einen Konvertierungsbefehl, so dass das Umschalten relativ einfach war, aber Jinja2 scheint unmöglich zu sein, wenn Sie nicht alles richtig überprüfen. Ich würde es gerne versuchen, wenn ich eine neue App erstelle.
Ich denke auch nicht, dass es gut ist, die Logik auf der Vorlagenseite zu stopfen oder die Daten überhaupt zu berühren, deshalb dachte ich, dass ich bei der Verwendung von Jinja2 besonders vorsichtig sein musste. Das gleiche steht im Dokument. http://jinja.pocoo.org/docs/dev/faq/#isn-t-it-a-terrible-idea-to-put-logic-into-templates
Recommended Posts