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.2

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.2
File Size Uploaded
wagtail_mptt_comments-0.2.2.tar.gz 46.0 kB Details

Built distribution (wheel)

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

Total release size: 100.3 kB

Release files / wagtail_mptt_comments-0.2.2.tar.gz

Download URL wagtail_mptt_comments-0.2.2.tar.gz
Size 46.0 kB
Tags Source
SHA-256 checksum
How to use checksums
550a9970d5bbcdcfdf305591cb5ba96fad404093bd934481987e84fce58a22a4
BLAKE2b-256 checksum
How to use checksums
9a71cc024000f0ede2ee68df86d4d54e0b1396b4924865501735ed53748b252c
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.2-py2.py3-none-any.whl

Download URL wagtail_mptt_comments-0.2.2-py2.py3-none-any.whl
Size 54.3 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
635a37c43d210677839f174b420a88db6f2fc955d0b0f52385642bfff960d7bf
BLAKE2b-256 checksum
How to use checksums
1d6f292a681879055abfa1a123f3076e542b4c65d845bbc39ab36438af472552
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

This release

0.2.2 This release

2 release files

0.2.1

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