cómo cargar la plantilla jinja directamente desde el sistema de archivos

Soy relativamente inexperto en python, así que me desvié cuando leí el documento de API de jinja en pocoo.org . Se lee:

La forma más sencilla de configurar Jinja2 para cargar plantillas para su aplicación se parece aproximadamente a esto:

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 busca las plantillas en la carpeta de plantillas dentro del paquete python de su aplicación.

Resulta que esto no es tan simple porque tiene que crear / instalar un paquete de Python con sus plantillas, lo que introduce una complejidad innecesaria, especialmente si no tiene 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?

Aquí le indicamos cómo : use un FileSystemLoader lugar de un PackageLoader . He encontrado ejemplos en la web aquí y aquí . Digamos que tienes un archivo de python en la misma dirección que tu plantilla:

 ./index.py ./template.html 

Este index.py encontrará la plantilla y la renderizará:

 #!/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) 

Resulta que el documento API de jinja2 tiene una sección que analiza todos los cargadores incorporados , por lo que es un poco vergonzoso no haberlo notado de inmediato. Pero la introducción está redactada de modo que PackageLoader parece ser el método predeterminado, “el más simple”. Para los recién llegados a Python, esto puede llevar a una caza de ganso salvaje.

Una forma más sencilla es llamar directamente al constructor jinj2.Template y usar open para cargar el archivo:

 from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')