Das jinja API-Dokument auf pocoo.org lautet:
Die einfachste Möglichkeit, Jinja2 so zu konfigurieren, dass Vorlagen für Ihre Anwendung geladen werden, sieht ungefähr so aus:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Dadurch wird eine Vorlagenumgebung mit den Standardeinstellungen und einem Loader erstellt, der die Vorlagen im Vorlagenordner im Python-Paket Ihrer Anwendung nachschlägt .
Wie sich herausstellt, ist dies nicht so einfach, da Sie ein Python-Paket mit Ihren Vorlagen erstellen / installieren müssen, was eine Menge unnötiger Komplexität mit sich bringt, insbesondere wenn Sie nicht beabsichtigen, Ihren Code zu verteilen. Sie können hier und hier auf SO-Fragen zum Thema verweisen , aber die Antworten sind vage und unbefriedigend.
Was ein naiver Neuling natürlich tun möchte, ist, die Vorlage direkt aus dem Dateisystem zu laden, nicht als Ressource in einem Paket. Wie wird das gemacht?
jinja2.load_template('template.html')
Jinja2.render(template_name, data)
jinja2.Environment(loader=templateLoader, autoescape=True)
. Oder lesen Sie die API-Dokumente für weitere Informationen. Ich habe gerade herausgefunden, dass ich aufgrund dieser Antwort eine große XSS-Sicherheitslücke hatte: /Eine einfachere Möglichkeit besteht darin, den
jinj2.Template
Konstruktor direkt aufzurufen undopen
die Datei zu laden:from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')
quelle
Hier ist der eine Liner:
template = Template(open('template_file.j2').read())
Anschließend können Sie die Vorlage in einer anderen Zeile oder für alle in einer Zeile rendern:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
quelle
Wenn Sie Python 3.4+ und Jinja2 - v2.11 + - verwenden, können Sie Pythons Pathlib und Dateisystem kombinieren, um den Ablauf zu vereinfachen
from pathlib import Path ... p = Path(__file__).parent.parent / 'templates' # sample relative path env = Environment( loader=FileSystemLoader(Path(p))) template = env.get_template('your_file.jinja2')
Ich bin mit der direkten Verwendung nicht zufrieden,
Template(file)
da Jinjas Vererbungsverarbeitung für Vorlagen möglicherweise nicht gut funktioniert.Pathlib-Unterstützung wird nur in der neuesten Version von Jinja - v2.11 + hinzugefügt
quelle