Dokument jinja API na pocoo.org stwierdza:
Najprostszy sposób skonfigurowania Jinja2 do ładowania szablonów dla twojej aplikacji wygląda mniej więcej tak:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Spowoduje to utworzenie środowiska szablonów z domyślnymi ustawieniami i programem ładującym, który wyszukuje szablony w folderze szablonów w pakiecie python aplikacji yourapplication .
Jak się okazuje, nie jest to takie proste, ponieważ musisz stworzyć / zainstalować pakiet Pythona ze swoimi szablonami, co wprowadza dużo niepotrzebnej złożoności, zwłaszcza jeśli nie masz zamiaru dystrybuować swojego kodu. Możesz odnieść się do pytań SO na ten temat tutaj i tutaj , ale odpowiedzi są niejasne i niezadowalające.
Naiwny początkujący chce oczywiście po prostu załadować szablon bezpośrednio z systemu plików, a nie jako zasób w pakiecie. Jak to się robi?
jinja2.load_template('template.html')
Jinja2.render(template_name, data)
jinja2.Environment(loader=templateLoader, autoescape=True)
. Aby uzyskać więcej informacji, zapoznaj się z dokumentacją API . Właśnie dowiedziałem się, że mam poważną lukę w zabezpieczeniach XSS po wykonaniu tej odpowiedzi: /Prostszym sposobem jest bezpośrednie wywołanie
jinj2.Template
konstruktora i użycie goopen
do załadowania pliku:from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')
źródło
Oto jedna wkładka:
template = Template(open('template_file.j2').read())
Następnie możesz wyrenderować szablon w innej linii lub dla wszystkich w jednej linii:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
źródło
Jeśli używasz Pythona 3.4+ i Jinja2 - v2.11 + - możemy połączyć pathlib i Filesystem Pythona, aby uprościć przepływ
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')
Nie czuję się komfortowo w używaniu bezpośrednio,
Template(file)
ponieważ przetwarzanie dziedziczenia szablonów Jinja może nie działać dobrze.Obsługa Pathlib jest dodana tylko w najnowszej wersji Jinja - v2.11 +
źródło