Boutran
Boutran

Reputation: 10124

render jinja2 template without a Flask context

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)

Upvotes: 19

Views: 13913

Answers (4)

Devtonic.net
Devtonic.net

Reputation: 11

You could use this simple steps to create and render a Jinja HTML template without using Flask. I use it to create email newsletter templates for my WordPress blog:

from jinja2 import Template

# Create a template string
template_string = """
<html>
<head>
    <title>{{ title }}</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>
"""

# Create a template object from the string
template = Template(template_string)

# Render the template with context data
rendered_template = template.render(title="My Example Page", name="John Doe")

# Print the rendered template
print(rendered_template)

Upvotes: 1

Y2H
Y2H

Reputation: 2537

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))

Upvotes: 2

Shankar ARUL
Shankar ARUL

Reputation: 13710

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

Upvotes: 31

davidism
davidism

Reputation: 127200

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)

Upvotes: 13

Related Questions