Use Jinja2 template for Flask frontend rendering.
Pass Variables
There are two ways passing variables via Jinja2
- pass value in render_template
@index_page.route("/") def index(): name = "jinja2" return render_template("index.html", name = name)
|
- pass a dictionary
@index_page.route("/dict") def index_dict(): name = "jinja2" context = {"name": name} return render_template("index.html", **context)
|
In html template
<body> <h1>Render Template</h1> <p>var name = {{name}}</p> </body>
|
if
in python file
@index_page.route("/template_dict") def res_temp_dict(): data = { "name": "Flask Using Dict", "company": { "name": "Facebook", "ticker": "FB", "price": 159.6 }, "hist": [1, 2, 3, 4, 5, 3, 2, 1] } return render_template("index.html", **data)
|
in Jinja2 file
<p> {% if company %} {{ company.name }} Ticker: {{company.ticker}} Price: {{company.price}} {% endif %} </p>
|
for
in Jinja2 file
<p> {% for num in hist %} <h1>{{num}}</h1> {% endfor %} </p>
|
Extend Template
In Python file
@index_page.route("/extend_template") def extend_template(): return render_template("extend_template.html")
@index_page.route("/extend_template2") def extend_template2(): return render_template("extend_template_2.html")
@index_page.route("/extend_template/<username>") def extend_template_username(username): data = { "username": username } return render_template("extend_template_2.html", **data)
|
In Jinja2 Template
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>This is common template</title> </head> <body> <h1>Template Header</h1> {% block content %} {% endblock %} <h1>Template Footer</h1> </body> </html>
|
{% extends "common/layout.html" %}
{% block content %} <h2>Body starts here</h2> {% endblock %}
|