template sheet last jinja index for cheat python templates jinja2

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



jinja2 index (3)

Aquí está el trazador de líneas:

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")

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 here y here , 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?


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'')


Aquí le indicamos cómo : use un FileSystemLoader lugar de un PackageLoader . He encontrado ejemplos en la web here y here . 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.