Шаблоны с Jinja2
Формируйте динамический HTML
«Шаблоны с Jinja2» — бесплатный урок Python Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.
Зачем нужны шаблоны
Быстрое формирование HTML из строк Python становится неудобным. Шаблоны хранят HTML в отдельных файлах и подставляют данные во время отображения. Flask использует движок Jinja2.
from flask import Flask, render_template
app = Flask(__name__)
# render_template loads a file from the templates/ folder
print('Jinja2 powers Flask templates')Папка templates
Flask ищет шаблоны в папке с именем templates/, расположенной рядом с приложением. Имена файлов обычно заканчиваются на .html.
# project/
# app.py
# templates/
# index.html
print('Templates live in templates/')render_template
render_template('index.html') загружает шаблон и возвращает сформированный HTML в качестве ответа.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
print('home renders index.html')Передача данных
Передавайте переменные как именованные аргументы. После этого шаблон сможет их отобразить.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name='Alice')
print('name=Alice is sent to the template')Вывод переменных
В шаблоне {{ name }} выводит переменную. Двойные фигурные скобки — это синтаксис выражений Jinja2.
# index.html
# <h1>Hello, {{ name }}!</h1>
print('Double braces output a value')Условные операторы
Управляющие конструкции Jinja2 используют {% %}. Блок if показывает содержимое только при выполнении условия.
# {% if user %}
# <p>Welcome back!</p>
# {% else %}
# <p>Please log in.</p>
# {% endif %}
print('{% if %} branches the markup')Циклы for
Перебирайте список с помощью {% for item in items %}, чтобы выводить повторяющуюся разметку, например список товаров.
# <ul>
# {% for item in items %}
# <li>{{ item }}</li>
# {% endfor %}
# </ul>
print('{% for %} repeats markup per item')Фильтры
Фильтры преобразуют значение с помощью вертикальной черты: {{ name|upper }} переводит его в верхний регистр. Встроенные фильтры включают length, default и title.
# {{ name|upper }} -> ALICE
# {{ items|length }} -> count
# {{ bio|default('N/A') }}
print('Filters transform values with |')Наследование шаблонов
Базовый шаблон определяет каркас страницы с заполнителями {% block %}. Дочерние шаблоны используют {% extends %} и заполняют эти блоки.
# base.html
# <body>{% block content %}{% endblock %}</body>
#
# page.html
# {% extends 'base.html' %}
# {% block content %}<p>Hi</p>{% endblock %}
print('extends + block share a layout')Автоматическое экранирование
Jinja2 автоматически экранирует HTML в переменных, защищая от межсайтового скриптинга. Значение вроде <script> отображается как текст, а не выполняется.
# If name = '<b>x</b>', {{ name }} renders the literal text
# Auto-escaping is on by default for safety
print('Auto-escaping prevents XSS')Связывание с url_for
В шаблонах по-прежнему можно вызывать url_for, часто для статических файлов: {{ url_for('static', filename='style.css') }}.
# <link rel='stylesheet'
# href="{{ url_for('static', filename='style.css') }}">
print('url_for works inside templates too')Проверка
Проверьте свои знания о Jinja2.
Повторение
Вы научились работать с шаблонами Jinja2.
render_template()отображает файлы изtemplates/{{ }}выводит значения, а{% %}выполняетif/for- Фильтры вроде
|upperпреобразуют значения extends+blockобеспечивают наследование структуры- Автоматическое экранирование защищает от XSS
Часто задаваемые вопросы
Урок «Шаблоны с Jinja2» бесплатный?
Да — полный текст урока «Шаблоны с Jinja2» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.
Чему я научусь в уроке «Шаблоны с Jinja2»?
Формируйте динамический HTML Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Python Academy?
Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Шаблоны с Jinja2»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Python Academy?
Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.