El documento de la API de jinja en pocoo.org dice:
La forma más sencilla de configurar Jinja2 para cargar plantillas para su aplicación se ve más o menos así:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Esto creará un entorno de plantilla con la configuración predeterminada y un cargador que mira hacia arriba en las plantillas de las plantillas de la carpeta dentro de la yourapplication paquete python.
Resulta que esto no es tan simple porque tiene que crear / instalar un paquete de Python con sus plantillas, lo que introduce mucha complejidad innecesaria, especialmente si no tiene la intención de distribuir su código. Puede consultar las preguntas SO sobre el tema aquí y aquí , pero las respuestas son vagas e insatisfactorias.
Lo que un novato ingenuo quiere hacer, obviamente, es simplemente cargar la plantilla directamente desde el sistema de archivos, no como un recurso en un paquete. ¿Cómo se hace esto?
jinja2.load_template('template.html')
Jinja2.render(template_name, data)
jinja2.Environment(loader=templateLoader, autoescape=True)
. O consulte los documentos de la API para obtener más información. Acabo de descubrir que terminé con una vulnerabilidad XSS importante al seguir esta respuesta: /Una forma más sencilla es llamar directamente al
jinj2.Template
constructor y usaropen
para cargar el archivo:from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')
fuente
Aquí está el delineador:
template = Template(open('template_file.j2').read())
Luego, puede representar la plantilla en otra línea o para todo en una línea:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
fuente
Si usamos Python 3.4+ y Jinja2 - v2.11 + - podemos combinar Pathlib y Filesystem de Python para simplificar el flujo
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')
No me siento cómodo usándolo directamente
Template(file)
ya que el procesamiento de herencia de plantillas de Jinja puede no funcionar bien.La compatibilidad con Pathlib solo se agrega en la última versión de Jinja - v2.11 +
fuente