import jinja2
46 Jinja: Basic
46.1 Template From String
= jinja2.Environment()
environment = environment.from_string("Hello, {{ name }}!")
template ="World") template.render(name
'Hello, World!'
from jinja2 import Environment, FileSystemLoader
from datetime import datetime
# Set up the Jinja2 environment
# FileSystemLoader looks for templates in the specified directory
= Environment(loader=FileSystemLoader("templates/"))
env # Define a date filter
def date_filter(value, format="%Y-%m-%d"):
"""Format a date using strftime."""
if isinstance(value, datetime):
return value.strftime(format)
return value
# Register the filter with your environment
'date'] = date_filter
env.filters[
# Load the template
= env.get_template('example.html.j2')
template
# Define data for the template
= {
data 'title': 'Learning Jinja2',
'heading': 'Welcome to Jinja2 Templates',
'users': [
'name': 'Dr. Kittipos', 'role': 'Radiologist'},
{'name': 'John', 'role': 'Developer'},
{'name': 'Lisa', 'role': 'Data Scientist'}
{
],'is_admin': True
}
# Render the template with the data
= template.render(**data) result
# Write the result to a file
with open('out/output-ex.html', 'w') as f:
f.write(result)
46.2 Template from file
46.2.1 Ex1: Message MD
from jinja2 import Environment, FileSystemLoader
= 100
max_score = "Python Challenge"
test_name = [
students "name": "Sandrine", "score": 100},
{"name": "Gergeley", "score": 87},
{"name": "Frieda", "score": 92},
{"name": "Fritz", "score": 40},
{"name": "Sirius", "score": 75},
{
]
= Environment(loader=FileSystemLoader("templates/"))
environment = environment.get_template("message-temp.md.j2") template
for student in students:
= f"out/message_{student['name'].lower()}.md"
filename = template.render(
content
student,=max_score,
max_score=test_name
test_name
)with open(filename, mode="w", encoding="utf-8") as f:
f.write(content)print(f"... wrote {filename}")
... wrote out/message_sandrine.md
... wrote out/message_gergeley.md
... wrote out/message_frieda.md
... wrote out/message_fritz.md
... wrote out/message_sirius.md
46.2.2 Ex2: Result HTML
= "out/students_results.html"
results_filename = environment.get_template("results.html.j2")
results_template = {
context "students": students,
"test_name": test_name,
"max_score": max_score,
}with open(results_filename, mode="w", encoding="utf-8") as results:
results.write(results_template.render(context))print(f"... wrote {results_filename}")
... wrote out/students_results.html
46.2.3 Ex3: Results MD
= "out/students_results.md"
results_filename = environment.get_template("results.md.j2")
results_template = {
context "students": students,
"test_name": test_name,
"max_score": max_score,
}with open(results_filename, mode="w", encoding="utf-8") as results:
results.write(results_template.render(context))print(f"... wrote {results_filename}")
... wrote out/students_results.md