django-siteajax
Приложение, упрощающие клиент-серверное взаимодействие с использованием Ajax
Репозиторий: https://github.com/idlesign/django-siteajax
Автор:
Игорь Стариков
Это подключаемое приложение для Django позволяет ускорить и упростить разработку проектов, в которых используется Ajax-запросы.
На клиентской стороне трудится htmx — продолжатель традиций библиотеки
На серверой стороне
Рассмотрим простой пример.
Где-то в файле с представлениями (обычно
Теперь добавим шаблон главной страницы
И осталось лишь накидать небольшой шаблон для списка новостей
В нём нет совершенно ничего особенного:
Наша страница с ajax-запросом готова.
На клиентской стороне трудится htmx — продолжатель традиций библиотеки
intercooler.js
.На серверой стороне
siteajax
предоставляет полезные инструменты для обработки клиентских запросов.Рассмотрим простой пример.
Где-то в файле с представлениями (обычно
views.py
): from django.shortcuts import render
from siteajax.toolbox import ajax_dispatch
def get_news(request):
news = ... # Допустим, что взяли из базы данных объекты новостей.
# Тут мы могли бы обратиться к request.ajax за дополнительными
# свойствами запроса или даже управлять некоторыми аспектами
# клиента при помощи siteajax.toolbox.AjaxResponse, однако
# для демонстрации достаточно будет просто вернуть страницу.
return render(request, 'sub_news.html', {'news': news})
@ajax_dispatch({
# Здесь укажем соответствие id html-элемента, порождающего
# ajax-запрос, функции обработчику.
'news-list': get_news,
})
def index_page(request):
"""Это представление - точка входа.
Оно может и отрисовать главную страницу
и обслужить ajax-запрос новостей.
"""
return render(request, 'index.html')
Теперь добавим шаблон главной страницы
index.html
: <!DOCTYPE html>
< html>
<head>
<!-- Берём клиентскую js библиотеку из CDN. -->
{% include "siteajax/cdn.html" %}
< /head>
<body>
<div id="news-list" hx-get hx-trigger="load">< /div>
<!-- Содержимое элемента div будет заменено
списком новостей, который будет автоматически подгружен
с сервера при помощи ajax после прогрузки страницы.
Обратите внимание на hx-* атрибуты, которыми
управляется библиотека htmx.
Заметьте как значение из id="news-list" используется
в декораторе @ajax_dispatch (см. код на Питоне выше). -->
< /body>
< /html>
И осталось лишь накидать небольшой шаблон для списка новостей
sub_news.html
.В нём нет совершенно ничего особенного:
{% for item in news %}<div>{{ item.title }}< /div>{% endfor %}
Наша страница с ajax-запросом готова.
На заметку
За более подробным описанием и примерами работы с
siteajax
обратитесь к документации siteajax (англ.). Описание и примеры работы с htmx
можно найти на официальном сайте библиотеки — https://htmx.org/ (англ.).