HTML-отчёты из Python: просто и красиво
Научись сохранять данные из скриптов в HTML — для отчётов, графиков и автоматизации.
Если твой Python-скрипт обрабатывает данные, логирует ошибки или считает метрики, возникает логичный вопрос: а как удобно сохранить результат?
Идеальный формат — HTML. Он красивый, гибкий и открывается в любом браузере. А ещё — его легко генерировать на лету.
В этой статье мы покажем, как быстро собирать HTML-отчёты в Python. Без фреймворков и лишней магии — только практичные приёмы 💡

🧰 Когда нужен HTML-отчёт?
После обработки CSV/Excel данных
Для вывода графиков и таблиц
При сборе метрик (например, в cron-задачах)
Для логов ошибок, обработанных красиво
Для хранения отчётов по проекту
📊 Преимущества HTML:
Удобно визуализировать
Поддерживает стили и графику
Открывается на любом устройстве
🛠 Способы генерации HTML
Метод | Подходит для |
---|---|
🔹 Ручная сборка строки | Простые случаи |
🔹 Шаблонизаторы (Jinja2) | Гибкие шаблоны |
🔹 Pandas | Таблицы |
🔹 Библиотеки (WeasyPrint, yattag) | Расширенная верстка |
🧪 Пример 1: Простой HTML вручную
html = """
<!DOCTYPE html>
<html>
<head><title>Отчёт</title></head>
<body>
<h1>Пример отчёта</h1>
<p>Всего пользователей: 25</p>
</body>
</html>
"""
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
🧪 Пример 2: Pandas .to_html()
для таблиц
import pandas as pd
df = pd.DataFrame({
"Имя": ["Кодик", "Алиса", "Джон"],
"Баллы": [85, 90, 78]
})
html_table = df.to_html(index=False)
html = f"""
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
table {{ border-collapse: collapse; width: 50%; margin: 20px auto; }}
th, td {{ border: 1px solid #ccc; padding: 8px; text-align: center; }}
th {{ background-color: #f2f2f2; }}
</style>
</head>
<body>
<h2 style="text-align:center;">Таблица баллов</h2>
{html_table}
</body>
</html>
"""
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
🧪 Пример 3: Jinja2 — шаблоны с данными
from jinja2 import Environment, FileSystemLoader
data = {"users": [{"name": "Кодик", "score": 88}, {"name": "Лена", "score": 95}]}
env = Environment(loader=FileSystemLoader("templates"))
template = env.get_template("report.html")
html = template.render(users=data["users"])
with open("report.html", "w", encoding="utf-8") as f:
f.write(html)
Шаблон templates/report.html
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Отчёт</title>
</head>
<body>
<h1>Баллы пользователей</h1>
<ul>
{% for user in users %}
<li>{{ user.name }} — {{ user.score }}</li>
{% endfor %}
</ul>
</body>
</html>
📦 Как добавить графики?
Если ты используешь matplotlib
или plotly
, можно сохранить график как изображение и вставить его в отчёт:
plt.savefig("chart.png")
html = """
<img src="chart.png" alt="График">
"""
💡 Где пригодится HTML-отчёт
📊 Внутренние отчёты команды
🛠 DevOps-мониторинги (через cron)
💼 Автоматические отчёты клиентам
📁 Архивирование результатов скриптов
🤖 А можно PDF?
Да! Используй WeasyPrint или pdfkit:
pip install weasyprint
from weasyprint import HTML
HTML("report.html").write_pdf("report.pdf")
В приложении Кодик ты найдёшь курсы по Python, HTML и другие.
Создавай шаблоны, визуализируй данные и делай всё красиво — даже если ты только начинаешь.
Присоединяйся также в наш телеграм-сообщества 📬
💬 Напиши, если хочешь увидеть статью про генерацию PDF, интерактивные отчёты или автоматические email-рассылки с HTML-отчётами!