Skip to main content

wagtail-mptt-comments

Nested, threaded comments with MPTT hierarchy, multi-layer anti-spam protection, and an AJAX bulk moderation dashboard for Wagtail CMS.

Wagtail Comments Tree Preview Wagtail Comments Form Preview

Features

  • Hierarchical Threading: Fast nested comment trees powered by django-mptt, with a configurable max nesting depth.
  • Wagtail Multi-Site Support: Built-in support for multi-domain setups. Sidebar widgets and listings automatically isolate comments per site without data leaking between domains.
  • Three-Layer Spam Protection:
    • Transparent honeypot traps.
    • Form submission speed verification (blocks instant bot auto-fillers).
    • Built-in lightweight math captcha for guest commentators.
  • Author Roles & Badges: Automatically distinguishes guests, registered members, moderators, and admins based on is_staff/is_superuser and configurable moderator groups — rendered as a role badge next to each comment.
  • Theme-Aware Avatars: Uses the user's profile picture when available, or a neutral inline SVG placeholder that inherits its color via currentColor — so it stays readable on any background, light or dark, instead of a hardcoded PNG silhouette.
  • Deep Linking: Every comment gets a real id="comment-<pk>" anchor, so links like /page/#comment-42 (used after posting a reply, or shared directly) actually scroll to and highlight the right comment.
  • Reply Notifications: Optional "notify me on reply" checkbox — when someone replies to a comment, its author gets an email if they opted in.
  • Wagtail Admin Dashboard:
    • List and interactive tree moderation views.
    • AJAX bulk approval and deletion.
    • In-place admin responses, shown publicly beneath the original comment.
    • Fully theme-aware admin UI — respects Wagtail's light/dark theme instead of imposing its own palette.
  • WYSIWYG Rich Text: Integrated with django-prose-editor (bold, italics, quotes, lists, links, code blocks).
  • Ready-to-use Frontend Styles: Clean, modular CSS themed entirely through CSS custom properties (--mptt-accent, --mptt-bg, etc.) — override them from your own stylesheet to match your site's palette in a couple of lines.

Admin Moderation Dashboard Admin Moderation Dashboard Tree

Installation

pip install wagtail-mptt-comments

Add required apps to INSTALLED_APPS in your settings.py:

INSTALLED_APPS = [
    ...
    "mptt",
    "wagtail_mptt_comments",
    ...
]

Include URLs in urls.py:

from django.urls import include, path

urlpatterns = [
    ...
    path("comments/", include("wagtail_mptt_comments.urls")),
    ...
]

Run database migrations:

python manage.py migrate

Optional settings

# settings.py

# Send an email to DEFAULT_FROM_EMAIL whenever a new comment is posted.
COMMENTS_NOTIFY_ADMINS = True

# Auto-approve guest comments instead of sending them to moderation.
# Authenticated users are always auto-approved.
COMMENTS_MODERATION = True  # default: True (guests go to moderation)

# Group names whose members get the "Moderator" badge on their comments.
COMMENTS_MODERATOR_GROUPS = ["Moderators"]

SITE_NAME = "My Site"
DEFAULT_FROM_EMAIL = "noreply@example.com"

Rendering in Templates

1. Comments Block on Page

In your page template (e.g. blog_page.html), simply load the tags and call render_comments:

{% extends "base.html" %}
{% load mptt_comment_tags %}

{% block content %}
    <h1>{{ page.title }}</h1>
    
    <!-- This tag automatically loads the comment tree and the reply form -->
    {% render_comments page %}
{% endblock %}

2. Latest Comments Sidebar Widget

To display recent comments in a sidebar or footer (automatically filtered by the current site in multi-site setups):

{% load mptt_comment_tags wagtailcore_tags %}

{% get_latest_comments 5 as latest_comments %}
<ul class="latest-comments-widget">
    {% for comment in latest_comments %}
        <li>
            <a href="{% pageurl comment.page %}#comment-{{ comment.id }}">
                <strong>{{ comment.display_author_name }}</strong>:
                <span>{{ comment.content|striptags|truncatewords:10 }}</span>
            </a>
        </li>
    {% endfor %}
</ul>

Theming

Override the CSS custom properties from your own stylesheet (loaded after comments.css) to match your site's design — no need to touch the plugin's files:

.article-container {
    --mptt-bg: #1c2226;
    --mptt-card-bg: #1c2226;
    --mptt-accent: #0e8a86;
    --mptt-accent-hover: #26b5a9;
    --mptt-text: #eaeef0;
    --mptt-border: #2c3437;
}

Wagtail Prose Editor with Image Chooser

Wagtail Image Navigator Dashboard

Case Study & Background

Read the full story behind the migration and architecture on our blog: Vs-Svet.ru / ZenWay.ru.

Metadata

Release files for wagtail-mptt-comments 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for wagtail-mptt-comments 0.2.1
File Size Uploaded
wagtail_mptt_comments-0.2.1.tar.gz 45.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for wagtail-mptt-comments 0.2.1
File Interpreter ABI Platform
wagtail_mptt_comments-0.2.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 99.8 kB

Release files / wagtail_mptt_comments-0.2.1.tar.gz

Download URL wagtail_mptt_comments-0.2.1.tar.gz
Size 45.8 kB
Tags Source
SHA-256 checksum
How to use checksums
272eb0b148e950a19d0695be1302aa63356e18a456af04c51bbbe91ad4d0bc88
BLAKE2b-256 checksum
How to use checksums
3b751dd2f8ffc076755eabf341e521c46006213fef6591f4f31e330e40f302e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.34.2

Release files / wagtail_mptt_comments-0.2.1-py2.py3-none-any.whl

Download URL wagtail_mptt_comments-0.2.1-py2.py3-none-any.whl
Size 54.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
74ab0c4c63c1bd987460b14391753a6be2a0b840c53e437df0245b3021ffcabd
BLAKE2b-256 checksum
How to use checksums
1e3092a4146922f2776f1776d4366d087ddd207bcc20434ceff76986b394dc66
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.34.2

Release history Release notifications | RSS feed

0.2.3

2 release files

0.2.2

2 release files

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page