Le document API jinja sur pocoo.org indique:
Le moyen le plus simple de configurer Jinja2 pour charger des modèles pour votre application ressemble à peu près à ceci:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Cela créera un environnement de modèle avec les paramètres par défaut et un chargeur qui recherchera les modèles dans des modèles dossier à l'intérieur du ton application python.
En fin de compte, ce n’est pas si simple car vous devez créer/installer un paquet python contenant vos modèles, ce qui introduit beaucoup de complexité inutile, surtout si vous n’avez pas l’intention de le faire. Vous pouvez vous référer à SO) questions sur le sujet ici et ici , mais les réponses sont vagues et peu satisfaisantes.
Évidemment, ce qu'un débutant naïf veut faire, c'est simplement charger le modèle directement à partir du système de fichiers, et non en tant que ressource dans un paquet. Comment cela se fait-il?
Voici comment : utilisez un FileSystemLoader
au lieu d'un PackageLoader
. J'ai trouvé des exemples sur le Web ici et ici . Supposons que vous avez un fichier python dans le même répertoire que votre modèle:
./index.py
./template.html
Cet index.py trouvera le modèle et le rendra:
#!/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)
Il s'avère que la documentation de l'API jinja2 a un section qui traite de tous les chargeurs intégrés , il est donc assez embarrassant de ne pas l'avoir remarqué tout de suite. Mais l’introduction est libellée de telle manière que PackageLoader
semble être la méthode par défaut, la plus "simple". Pour les nouveaux venus en python, cela peut mener à une poursuite de l'oie sauvage.
Un moyen plus simple consiste à appeler directement le jinj2.Template
constructeur et utilisez open
pour charger le fichier:
from jinja2 import Template
with open('template.html.jinja2') as file_:
template = Template(file_.read())
template.render(name='John')
Voici la doublure:
template = Template(open('template_file.j2').read())
Ensuite, vous pouvez rendre le modèle sur une autre ligne, ou pour tout sur une ligne:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")