How do I render jinja2 output to a file in Python instead of a Browser

Bill G. picture Bill G. · Aug 8, 2012 · Viewed 66.3k times · Source

I have a jinja2 template (.html file) that I want to render (replace the tokens with values from my py file). Instead of sending the rendered result to a browser, however, I want to write it to a new .html file. I would imagine the solution would also be similar for a django template.

How can I do this?

Answer

sberry picture sberry · Aug 8, 2012

How about something like this?

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>

output

<h1>Hello World!</h1>

If you are using a framework, such as Flask, then you could do this at the bottom of your view, before you return.

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