J'ai un modèle jinja2 (fichier .html) que je veux rendre (remplacez les jetons par des valeurs de mon fichier py). Au lieu d'envoyer le résultat rendu à un navigateur, cependant, je veux l'écrire dans un nouveau fichier .html. J'imagine que la solution serait également similaire pour un modèle Django.
Comment puis-je faire ceci?
Que diriez-vous quelque chose comme ça?
from jinja2 import Environment, FileSystemLoader
env = Environment(loader=FileSystemLoader('templates'))
template = env.get_template('test.html')
output_from_parsed_template = template.render(foo='Hello World!')
print(output_from_parsed_template)
# to save the results
with open("my_new_file.html", "w") as fh:
fh.write(output_from_parsed_template)
test.html
<h1>{{ foo }}</h1>
sortie
<h1>Hello World!</h1>
Si vous utilisez un framework, tel que Flask, vous pouvez le faire en bas de votre vue, avant de revenir.
output_from_parsed_template = render_template('test.html', foo="Hello World!")
with open("some_new_file.html", "wb") as f:
f.write(output_from_parsed_template)
return output_from_parsed_template
Vous pouvez vider un flux de modèle dans un fichier comme suit:
Template('Hello {{ name }}!').stream(name='foo').dump('hello.html')
Réf: http://jinja.pocoo.org/docs/dev/api/#jinja2.environment.TemplateStream.dump
Donc, après avoir chargé le modèle, vous appelez render, puis vous écrivez la sortie dans un fichier. L'instruction 'with' est un gestionnaire de contexte. À l'intérieur de l'indentation, vous avez un fichier ouvert comme un objet appelé "f".
template = jinja_environment.get_template('CommentCreate.html')
output = template.render(template_values))
with open('my_new_html_file.html', 'w') as f:
f.write(output)