Skip to content
Advertisement

Insert static files literally into Jinja templates without parsing them

I’m trying to insert file into a page using Jinja 2.6 using the include tag. This worked fine until I started using characters in the file that are reminiscent of the Jinja syntax, at which point it realized it couldn’t parse them and bombed.

Short of going though the file and escaping all characters, what can I do to tell Jinja to just include the file as is?

Advertisement

Answer

You can define a function to load the text file and render it in the template:

import jinja2

def include_file(name):
    return jinja2.Markup(loader.get_source(env, name)[0])

loader = jinja2.PackageLoader(__name__, 'templates')
env = jinja2.Environment(loader=loader)
env.globals['include_file'] = include_file

def render():
    return env.get_template('page.html').render()

if __name__ == '__main__':
    print render()

In the template, call it like this:

{{ include_file('file.txt') }}
User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement