15

I have a Flask application that calls flask.render_template without problems when it is invoked from a flask http request.

I need the same method to work outside of flask (from a python back end program)

resolved_template =  render_template(template_relative_path, **kwargs)

I could use the jinja2 api, but I would like the same method to work, in both contexts (flask and command line)

doru
  • 8,612
  • 2
  • 31
  • 43
Max L.
  • 9,374
  • 15
  • 55
  • 85

3 Answers3

26

If you want to completely bypass flask and use purely Jinja for rendering your template, you can do as such

import jinja2

def render_jinja_html(template_loc,file_name,**context):

    return jinja2.Environment(
        loader=jinja2.FileSystemLoader(template_loc+'/')
    ).get_template(file_name).render(context)

And then you can call this function to render your html

Shankar ARUL
  • 11,199
  • 10
  • 64
  • 66
13

You need to render it in an app context. Import your app in your backend code and do the following.

with app.app_context():
    data = render_template(path, **context)
davidism
  • 110,080
  • 24
  • 357
  • 317
0

What I use is this code:

import jinja2
template_values = {
  'value_name_in_html': value_name_in_python,   
}

template = JINJA_ENVIRONMENT.get_template("file_patch")
self.response.write(template.render(template_values))
Y2H
  • 2,317
  • 1
  • 16
  • 36
  • 1
    It's complaining JINJA_ENVIRONMENT is not set. How should I set it ? – blissweb Aug 12 '20 at 02:58
  • Hi @blissweb, I am sorry I have not used Jinja in like 4 years so this info is not at the top of my head at the moment. If I get a chance later today I’ll look at it and get back to you. – Y2H Aug 12 '20 at 08:13