O documento da API jinja em pocoo.org afirma:
A maneira mais simples de configurar o Jinja2 para carregar modelos para seu aplicativo é mais ou menos assim:
from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
Isso criará um ambiente de modelo com as configurações padrão e um carregador que procura os modelos na pasta de modelos dentro do pacote python de seu aplicativo .
Acontece que isso não é tão simples porque você tem que fazer / instalar um pacote Python com seus modelos nele, o que apresenta muita complexidade desnecessária, especialmente se você não tem intenção de distribuir seu código. Você pode consultar as perguntas do SO sobre o tópico aqui e aqui , mas as respostas são vagas e insatisfatórias.
O que um novato ingênuo quer fazer, obviamente, é apenas carregar o modelo diretamente do sistema de arquivos, não como um recurso em um pacote. Como isso é feito?
jinja2.load_template('template.html')
Jinja2.render(template_name, data)
jinja2.Environment(loader=templateLoader, autoescape=True)
. Ou consulte os documentos da API para obter mais informações. Acabei de descobrir que acabei com uma grande vulnerabilidade XSS por seguir esta resposta: /Uma maneira mais simples é chamar diretamente o
jinj2.Template
construtor e usaropen
para carregar o arquivo:from jinja2 import Template with open('template.html.jinja2') as file_: template = Template(file_.read()) template.render(name='John')
fonte
Aqui está o único forro:
template = Template(open('template_file.j2').read())
Em seguida, você pode renderizar o modelo em outra linha ou para todos em uma linha:
rendered = Template(open('template_file.j2').read()).render(var="TEXT")
fonte
Se estiver usando Python 3.4+ e Jinja2 - v2.11 + - podemos combinar pathlib do python e o sistema de arquivos para simplificar o fluxo
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')
Não me sinto confortável com o uso direto,
Template(file)
pois o processamento de herança de modelo do Jinja pode não funcionar bem.O suporte a Pathlib foi adicionado apenas na versão mais recente do Jinja - v2.11 +
fonte