Введение
Среда веб-разработки становится все более сложной. Фронтенд-фреймворки, такие как React или Vue.js, мощны, но не всегда необходимы для каждого проекта. В частности, при реализации простых динамических функций эти фреймворки могут привести к излишней сложности.
HTMX — это легкая HTML-ориентированная библиотека, созданная для решения этих проблем. Она хорошо интегрируется с серверными фреймворками, такими как Django, позволяя легко создавать динамические веб-приложения.

Что такое HTMX?
HTMX — это легковесная библиотека JavaScript, разработанная для упрощения динамической веб-разработки. Она позволяет реализовать динамические функции, такие как AJAX, WebSocket и Server-Sent Events (SSE), используя только HTML-атрибуты, без сложного кода JavaScript или фронтенд-фреймворков.
Основные HTML-атрибуты HTMX
- hx-get: Отправляет
GETзапрос на сервер. - hx-post: Отправляет
POSTзапрос на сервер. - hx-swap: Вставляет ответ, полученный от сервера, в определенную часть страницы.
- hx-trigger: Запускает действие в ответ на определенные события, такие как клик или перемещение мыши.
- hx-target: Указывает конкретный HTML-элемент, в который будет рендериться содержимое, полученное от сервера.
Благодаря этим атрибутам HTMX естественным образом сочетается с серверно-ориентированным подходом к рендерингу, используемым в Django.
Различия между шаблонами Django и HTMX
1. Шаблоны Django
- Шаблоны Django рендерят HTML на сервере, а затем возвращают всю страницу клиенту.
- Это традиционный подход, при котором страница перезагружается.
- Для добавления динамических функций требуется написание JavaScript-кода вручную.
2. Django + HTMX
- С помощью HTMX можно обновлять только определенные части страницы без ее полной перезагрузки.
- Представление Django возвращает только часть HTML, а HTMX вставляет ее в указанный элемент на стороне клиента.
- Это обеспечивает динамический пользовательский опыт без сложного JavaScript-кода.
Пример интеграции Django и HTMX
Базовый код представления Django
from django.shortcuts import render
def update_content(request):
if request.htmx:
return render(request, 'partials/content.html') # 부분 HTML 반환
return render(request, 'index.html') # 전체 페이지 반환
Конфигурация шаблонов
index.html
<!DOCTYPE html>
<html>
<head>
<title>HTMX Example</title>
<script src="https://unpkg.com/htmx.org"></script>
</head>
<body>
<div id="content">
<p>이 콘텐츠는 변경됩니다.</p>
</div>
<button hx-get="/update/" hx-target="#content">콘텐츠 업데이트</button>
</body>
</html>
partials/content.html
<p>새로운 콘텐츠가 여기 표시됩니다.</p>
Результат работы
- Когда пользователь нажимает кнопку, отправляется
GETзапрос на URL/update/. - Сервер возвращает шаблон
partials/content.html, и содержимое внутри<div id="content">заменяется без перезагрузки страницы.
Преимущества совместного использования Django и HTMX
- Простая динамическая веб-разработка: Легкая реализация динамических функций, таких как AJAX, без использования JavaScript.
- Сохранение серверно-ориентированной логики: Бизнес-логика остается на сервере, что выгодно с точки зрения безопасности и удобства обслуживания.
- Возможность замены фронтенд-фреймворков: Улучшение пользовательского опыта без тяжелых фреймворков, таких как React или Vue.js.
В заключение этой части
Благодаря высокой совместимости с Django, HTMX позволяет создавать динамичные веб-приложения без излишней сложности. Он достаточно мощный и простой, чтобы заменить существующие фронтенд-фреймворки, поэтому мы настоятельно рекомендуем попробовать его в ваших проектах.
В следующей части мы рассмотрим связь HTMX с Ajax, а также различия с React, и углубимся в HTMX на примерах работы с Ajax-запросами и HTMX. Следите за обновлениями!
Читать по теме :
- Упрощение динамической веб-разработки с Django и HTMX (Часть 2)
- Упрощение динамической веб-разработки с Django и HTMX (Часть 3)
- Упрощение динамической веб-разработки с Django и HTMX (Часть 4)
- Откровенный отзыв разработчика Django: Почему я выбрал Alpine.js и отошел от HTMX
- Упрощение динамической веб-разработки с Django и HTMX: использование форм и сериализаторов
- Упрощение динамической веб-разработки с Django и HTMX: Использование триггеров