import jinja247 Jinja: Basic
47.1 Template From String
environment = jinja2.Environment()
template = environment.from_string("Hello, {{ name }}!")
template.render(name="World")'Hello, World!'
from jinja2 import Environment, FileSystemLoader
from datetime import datetime
# Set up the Jinja2 environment
# FileSystemLoader looks for templates in the specified directory
env = Environment(loader=FileSystemLoader("templates/"))
# 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
env.filters['date'] = date_filter
# Load the template
template = env.get_template('example.html.j2')
# 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
result = template.render(**data)# Write the result to a file
with open('out/output-ex.html', 'w') as f:
f.write(result)47.2 Template from file
47.2.1 Ex1: Message MD
from jinja2 import Environment, FileSystemLoader
max_score = 100
test_name = "Python Challenge"
students = [
{"name": "Sandrine", "score": 100},
{"name": "Gergeley", "score": 87},
{"name": "Frieda", "score": 92},
{"name": "Fritz", "score": 40},
{"name": "Sirius", "score": 75},
]
environment = Environment(loader=FileSystemLoader("templates/"))
template = environment.get_template("message-temp.md.j2")for student in students:
filename = f"out/message_{student['name'].lower()}.md"
content = template.render(
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
47.2.2 Ex2: Result HTML
results_filename = "out/students_results.html"
results_template = environment.get_template("results.html.j2")
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
47.2.3 Ex3: Results MD
results_filename = "out/students_results.md"
results_template = environment.get_template("results.md.j2")
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