Python > Web Development with Python > Flask > Templates (Jinja2)
Rendering HTML with Jinja2 Templates in Flask
This snippet demonstrates how to use Jinja2 templates in Flask to dynamically generate HTML pages. It covers loading templates, passing data to templates, and using basic template syntax.
Basic Flask App Setup
This code initializes a basic Flask application. It imports the necessary modules, `Flask` and `render_template`. The `render_template` function is crucial for rendering Jinja2 templates. The `/` route is defined, and the `index` function renders the `index.html` template, passing the string 'Flask User' as the `name` variable.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', name='Flask User')
if __name__ == '__main__':
app.run(debug=True)
Creating the Jinja2 Template (index.html)
This is a simple HTML template using Jinja2 syntax. The `{{ name }}` is a placeholder that will be replaced with the value passed from the Flask application (in this case, 'Flask User'). Jinja2 uses double curly braces `{{ ... }}` to denote variables.
<!DOCTYPE html>
<html>
<head>
<title>Flask Jinja2 Example</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
<p>Welcome to my Flask application.</p>
</body>
</html>
Folder Structure
To make sure Flask can find the template, you need to organize your files correctly. Flask expects templates to be in a folder named `templates` in the same directory as your main Python script. my_app/ app.py # Your Flask application templates/ index.html # Your Jinja2 template
Running the Application
Save the Python code as `app.py` and the HTML code as `index.html` in the `templates` folder. Then, run the Python script from your terminal: `python app.py`. Visit `http://127.0.0.1:5000/` in your browser to see the rendered page.
Concepts Behind the Snippet
This snippet showcases the fundamental concept of template engines. Instead of hardcoding HTML directly into your Python code, Jinja2 allows you to create reusable HTML templates with placeholders. This separation of concerns makes your code more maintainable and easier to read.
Real-Life Use Case
Imagine building a dynamic blog where each post has a unique title and content. Using Jinja2, you can create a single template and pass the post's title and content as variables, generating each page dynamically.
Best Practices
Interview Tip
Be prepared to explain the benefits of using a template engine like Jinja2 and how it improves code maintainability and security. Understand the basics of template inheritance and how to pass data from your Python code to the templates.
When to Use Them
Jinja2 templates are essential when you need to generate dynamic HTML content based on data from your Python application. This is especially useful for web applications that display data from databases or handle user input.
Memory Footprint
The memory footprint of Jinja2 is generally low. However, complex templates with many variables and loops can consume more memory. Optimizing your templates and data structures can help minimize memory usage.
Alternatives
Pros
Cons
FAQ
-
How do I pass multiple variables to a template?
You can pass multiple variables to a template as keyword arguments to the `render_template` function. For example: `return render_template('index.html', name='Flask User', age=30, city='New York')`. Then, you can access these variables in the template using `{{ name }}`, `{{ age }}`, and `{{ city }}`. -
How do I use loops in Jinja2 templates?
You can use the `{% for ... in ... %}` syntax to iterate over a list or dictionary in your template. For example: html-
{% for item in items %}
- {{ item }} {% endfor %}
-
How can I use conditional statements in a template?
You can use `{% if ... %}`, `{% elif ... %}`, and `{% else %}` to create conditional blocks in your template. For example: html {% if user.is_authenticated %}Welcome, {{ user.name }}!
{% else %}Please log in.
{% endif %}