# Python Template Engine Jinja2 and Integrate with Flask

# Jinja Example

Jinja is quite easy to use. Let me give an example to render markdown file.

Template file hello.md.jinja2:

# Hello, {{name}}
Welcome to {{website}}

# The skills
{% for i in skills %}{{i}} {% endfor %}

In python code, just read the template and render with the parameters:

from jinja2 import Template
import pathlib


def render(name, website):
    current_path = pathlib.Path(__file__).parent.parent.resolve().__str__()
    print(current_path)

    file = open(current_path + '/templates/hello.md.jinja2', 'r')
    content = file.read()
    file.close()
    template = Template(content)
    rendered_md = template.render(name=name, website=website, skills=['Java', 'Python', 'Docker', 'Kubernetes'])
    print(rendered_md)

    output = open(current_path + '/output/hello.' + website + '.md', 'w')
    output.write(rendered_md)
    output.close()
    return rendered_md


if __name__ == '__main__':
    render('Larry', 'www.pkslow.com')
    render('Deng', 'www.google.com')

Create Template with template content:

template = Template(content)

Render with parameters:

rendered_md = template.render(name=name, website=website, skills=['Java', 'Python', 'Docker', 'Kubernetes'])

The result:

# Hello, Larry
Welcome to www.pkslow.com

# The skills
Java Python Docker Kubernetes 

All the code can check on pkslow-samples/python/jinja-example (opens new window)

# Integration with Flask

Flask is a lightweight WSGI framework, we can use Flask to build web application.

Python code to render the HTML content and return:

from flask import Flask, render_template

app = Flask(__name__)


@app.route("/")
def home():
    return render_template("index.html", title='main page')


@app.route("/list")
def default():
    return render_template("list.html", title='Skill List',
                           skills=['Java', 'Python', 'Docker', 'Kubernetes', "Google Cloud Platform"])


if __name__ == "__main__":
    app.run(debug=False)

Template file index.html:

{% extends "layout.html" %}
{% block content %}
<ul>
    <li><a href="/list"> list </a></li>
</ul>
{% endblock %}

Template file list.html:

{% extends "layout.html" %}
{% block content %}
<h2>The skill list</h2>
<ul>
    {% for skill in skills%}
    <li>{{skill}}</li>
    {% endfor %}
</ul>
{% endblock %}

The result for /:

The result for /list:

All the code can check on pkslow-samples/python/jinja-with-flask (opens new window)


References:

Last Updated: 8/18/2023, 11:39:36 PM