2016-07-28 15 views
6

Ich bin bei Python relativ unerfahren, also bin ich in die Irre gegangen, als ich die jinja API document at pocoo.org gelesen habe. Dort heißt es:wie man jinja Vorlage direkt aus dem Dateisystem laden

Die einfachste Art und Weise Jinja2 zu konfigurieren Vorlagen für Ihre Anwendung sieht wie folgt grob zu laden:
from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 
Dies wird eine Vorlage Umgebung mit den Standardeinstellungen erstellen und einen Loader, der die Vorlagen schaut nach oben in Die Vorlagen Ordner innerhalb der yourapplication Python-Paket.

Wie sich herausstellt, ist dies nicht so einfach, da Sie ein Python-Paket mit Ihren Templates darin installieren müssen, was unnötige Komplexität mit sich bringt, besonders wenn Sie nicht beabsichtigen, Ihren Code zu verteilen. Sie können sich auf SO Fragen zum Thema here und here beziehen, aber die Antworten sind vage und unbefriedigend.

Was ein naiver Neuling möchte, ist offensichtlich, laden Sie einfach die Vorlage direkt aus dem Dateisystem, nicht als eine Ressource in einem Paket. Wie wird das gemacht?

Antwort

15

Hier ist, wie: eine FileSystemLoader anstelle eines PackageLoader verwenden. Ich fand Beispiele im Internet here und here. Sagen wir, Sie in das gleiche Verzeichnis wie die Vorlage eine Python-Datei:

./index.py 
./template.html 

Diese index.py wird die Vorlage finden und machen es:

#!/usr/bin/python 
import jinja2 

templateLoader = jinja2.FileSystemLoader(searchpath="./") 
templateEnv = jinja2.Environment(loader=templateLoader) 
TEMPLATE_FILE = "template.html" 
template = templateEnv.get_template(TEMPLATE_FILE) 
outputText = template.render() # this is where to put args to the template renderer 

print(outputText) 

Es stellt sich heraus, die jinja2 API doc tut Habe eine section which discusses all the built-in loaders, also ist es irgendwie peinlich, das nicht gleich bemerkt zu haben. Aber die Einleitung ist so formuliert, dass PackageLoader die "einfachste" Standardmethode zu sein scheint. Für Newcomer bei Python kann dies zu einer wilden Jagd führen.

+10

Art von lächerlich Sie können eine Vorlage aus einer Datei in einer Zeile z. 'jinja2.load_template ('template.html')' – Matt

Verwandte Themen