Мои проекты

Commentail: своя система комментариев для Wagtail

Я давно делаю сайты на Wagtail. В основном это проекты клиентов, и периодически на них нужны комментарии. Каждый раз приходилось либо писать их с нуля, либо переносить старые наработки и адаптировать под новый проект. Честно говоря, эта рутина мне жутко надоела. В итоге я собрал отдельную библиотеку — Commentail. Расскажу, с чего всё началось, что получилось и как проект изменился после первого релиза.

Коротко

  • Я собрал свой опыт разработки комментариев для Wagtail в отдельную библиотеку — Commentail.
  • Комментарии остаются на вашем сервере. Есть модерация в Wagtail, гости с подтверждением почты, ответы и уведомления.
  • В статье сохранил историю первого релиза и обновления 0.1.1, а также рассказал, что изменилось после первых отзывов.
  • Commentail можно установить из PyPI. Код открыт под MIT; актуальная стабильная версия — 1.2.0.
Синяя птица Commentail на облачке комментария и название библиотеки на синем фоне
Commentail — своя система комментариев для Wagtail.

Почему я вернулся к этой идее

Собирать отдельную систему комментариев я начал ещё пару лет назад, но потом как-то подзабросил это дело. Наработки остались, а до библиотеки, которую можно спокойно подключать к разным проектам, я тогда так и не дошёл.

Раньше я пробовал и готовое решение для Wagtail на основе django-comments-xtd, но под мои задачи оно тогда не подошло. Поэтому продолжал делать комментарии самостоятельно.

Сейчас у меня снова такой период, когда нужно делать много сайтов для заказчика. Это и стало поводом вернуться к старой идее. Я решил, что очередную реализацию комментариев под конкретные сайты писать уже не буду. Пора наконец вынести всё в отдельную библиотеку и дальше развивать её в одном месте.

Самое важное для меня — простое подключение. Хотелось установить библиотеку, добавить несколько строк в шаблон, настроить необходимое и дальше спокойно пользоваться. Чтобы комментарии работали из коробки и не приходилось на каждом сайте снова разбираться с их внутренним устройством.

Так появился Commentail. Чтобы проверить библиотеку в работе, я подключил её на своём сайте hardcodd.net. Там можно было пройти весь путь: оставить комментарий, подтвердить почту, проверить модерацию, ответить и посмотреть, как всё выглядит в оформлении сайта.

Какие комментарии мне были нужны

Для своего сайта я хотел комментарии без внешнего сервиса. Данные должны оставаться в базе проекта, а управлять обсуждениями хотелось в привычной админке Wagtail.

Ещё мне хотелось дать возможность написать без регистрации. Заводить учётную запись ради одного вопроса под статьёй захочется далеко не каждому. Поэтому в Commentail гость может указать имя и почту, а затем подтвердить адрес по ссылке из письма. После этого комментарий проходит модерацию по настройкам сайта. Адрес почты другим читателям не показывается.

Если человек уже вошёл на сайт, используется его существующая учётная запись. Отдельную регистрацию Commentail не добавляет.

Можно оставить свой комментарий или ответить другому человеку. Форма ответа открывается рядом с выбранным комментарием, поэтому видно, кому отвечаешь. Ответы отображаются с одним уровнем вложенности.

При включённых уведомлениях автор комментария получает на почту уведомление об ответе. Отправку можно отключить в настройках сайта. А ссылку для отписки я решил поместить в само письмо, чтобы не добавлять ещё одну галочку в интерфейс комментариев.

С оформлением тоже хотелось обойтись без долгой подгонки под каждый проект. Виджет наследует шрифты и цвета сайта. Если нужно что-то поменять, можно поправить стили или переопределить шаблоны.

С JavaScript пользоваться комментариями удобнее, но отправлять комментарии, отвечать и редактировать их можно и без него.

Модерация внутри Wagtail

Комментарии находятся в отдельном разделе админки. Можно посмотреть ожидающие проверки, выбрать сразу несколько и одобрить или отклонить их. Есть фильтры, чтобы найти нужное обсуждение.

Модератор не может редактировать текст комментария. Он управляет его публикацией: может одобрить, отклонить или скрыть.

Общие правила задаются для сайта, а для отдельной страницы их можно изменить. Например, если какое-то обсуждение требует более внимательной проверки, для него можно включить предварительную модерацию.

Есть и правила для слов и фраз. Их можно редактировать в админке, загружать и выгружать через CSV.

Для меня было важно, чтобы всё это оставалось внутри Wagtail. Редактор уже работает с материалами сайта в этой админке, там же он может заниматься и комментариями.

Первый публичный релиз

17 октября 2026 года я выпустил первую публичную версию Commentail — 0.1.0. Она работала с Wagtail 7.4 LTS и Django 5.2.

Это была бета. Хотелось наконец выложить библиотеку, дать возможность попробовать её другим разработчикам и посмотреть, чего будет не хватать за пределами моего сайта.

Уже 19 октября вышло обновление 0.1.1. В нём я расширил совместимость и поправил несколько вещей, которые обнаружились после первого выпуска.

Что изменилось в 0.1.1

В этом обновлении появилась поддержка Wagtail 8.0 и Django 6.0–6.1. Сочетания версий различались: Wagtail 7.4 поддерживался с Django 5.2 и 6.0, а Wagtail 8.0 — с Django 5.2, 6.0 и 6.1.

Заодно я исправил ссылки в письмах. Они стали правильно формироваться и тогда, когда маршруты Commentail подключены по вложенному пути.

Для новых имён гостей добавил ограничение в 40 символов. При подсчёте учитываются символы Unicode: например, буква с комбинируемым знаком считается одним символом. Если имя слишком длинное, форма показывает ошибку; сервер тоже проверяет его перед сохранением.

Ещё исправил перевод подписи поля имени, чтобы она не подхватывала неподходящий перевод из другой части сайта.

Новых миграций Commentail в этом выпуске не было. Полный список изменений сохранился в описании релиза 0.1.1.

Что изменилось после первых отзывов

Когда библиотека стала доступна, я рассказал о ней в Wagtail Slack. Один из пользователей предложил сделать гибче отправку писем. У некоторых команд уже настроены почта и очередь задач, и было бы удобно подключить Commentail к тому, что у них работает.

Изначально я предусмотрел очередь писем в базе и команду, которая обрабатывает её по расписанию. Мне нравится такой подход: для комментариев не приходится отдельно устанавливать и обслуживать Redis или Celery. Для небольшого сайта это удобный способ запуска.

Но возможность использовать существующую инфраструктуру тоже пригодилась бы. Поэтому в версии 1.2.0 я добавил поддержку почтового backend Django и запуск обработки через очередь задач проекта. Прежний способ с командой по расписанию сохранился.

На своём сайте я мог спокойно пользоваться первоначальным вариантом. А после этого обсуждения стало понятнее, что стоит предусмотреть для других проектов.

К этому времени Commentail уже вышел из беты. На момент обновления статьи опубликована стабильная версия 1.2.0. Между первыми выпусками и этой версией я также доработал модерацию, добавил массовые действия и расширил переводы интерфейса и писем до шести языков.

Актуальные возможности и совместимость я собрал на странице проекта.

Как подключить

Commentail устанавливается, как и любое другое Django-приложение:

sh
python -m pip install commentail

После настройки приложения, middleware и маршрутов блок комментариев добавляется в шаблон:

django
{% load commentail_tags %}

{% commentail_css %}

{% commentail_js %}

{% commentail page %}

Теги стилей и скриптов достаточно разместить один раз в базовом шаблоне, а блок комментариев — там, где он нужен.

Совсем без настройки, конечно, не получится: библиотеку нужно подключить к проекту, применить миграции, а для писем настроить отправку и фоновую обработку. По умолчанию можно запускать команду раз в минуту:

sh
python manage.py process_commentail

Если в проекте уже есть очередь задач, обработку можно подключить к ней.

Все шаги описаны в руководстве по установке. Там же есть инструкции по обновлению.

Что дальше

Пока я остановился на текстовых комментариях. Загрузку файлов, лайки и появление новых ответов без перезагрузки страницы ещё не добавлял.

Я рад, что наконец вернулся к этим наработкам и довёл их до отдельной библиотеки. Сейчас Commentail работает на моём сайте, а для следующих проектов у меня есть готовый пакет, который можно подключать и дорабатывать в одном месте.

Если решите попробовать Commentail, было бы классно, если бы вы поделились своим опытом: чего не хватило, что оказалось неудобным или с чем возникли сложности.

Страница проекта · Код и скриншоты на GitHub · Пакет на PyPI

Была ли статья полезна?

Комментарии 0

Имя: до 40 символов.

После отправки мы пришлём письмо со ссылкой для подтверждения email.

Не более 5000 символов.

Опубликованных комментариев пока нет.