wagtail-mptt-comments
Nested, threaded comments with MPTT hierarchy, multi-layer anti-spam protection, and an AJAX bulk moderation dashboard for Wagtail CMS.
Features
- Hierarchical Threading: Fast nested comment trees powered by
django-mptt, with a configurable max nesting depth. - 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_superuserand 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.
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
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 CSS, the comment tree, and the reply form -->
{% render_comments page %}
{% endblock %}
### 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:
```css
.article-container {
--mptt-bg: #1c2226;
--mptt-card-bg: #1c2226;
--mptt-accent: #0e8a86;
--mptt-accent-hover: #26b5a9;
--mptt-text: #eaeef0;
--mptt-border: #2c3437;
}
Recommended Complementary Packages
- wagtail-prose-editor-images: Add a native Wagtail Image Chooser button to the prose editor.
- wagtail-image-directories: Organize uploaded images into structured
year/slugfolders on disk.
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.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| wagtail_mptt_comments-0.1.2.tar.gz | 44.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wagtail_mptt_comments-0.1.2-py2.py3-none-any.whl | Python 3, Python 2 | none | any | Details |
Total release size: 97.5 kB
Release files / wagtail_mptt_comments-0.1.2.tar.gz
| Download URL | wagtail_mptt_comments-0.1.2.tar.gz |
|---|---|
| Size | 44.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5a84120a6a5c98af2e15338a3ee78ea774891a33a5ca3e667c35aa0d47d0a2c9
|
|
BLAKE2b-256 checksum How to use checksums |
cae334752e70f8b75997742ae495f1bfb87c174abd73dae72d324c695d682972
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.32.5
|
Release files / wagtail_mptt_comments-0.1.2-py2.py3-none-any.whl
| Download URL | wagtail_mptt_comments-0.1.2-py2.py3-none-any.whl |
|---|---|
| Size | 52.9 kB |
| Tags | Python 2 Python 3 |
|
SHA-256 checksum How to use checksums |
6c0990a040aa5d77a98536688dfc539ddfb8d5c0a89d84fb7c7c66046306c206
|
|
BLAKE2b-256 checksum How to use checksums |
5646e0fca41dd486e9a6c283ac44f1d8e32d8558cd9195d55ebfb2dd840a7ffe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
python-requests/2.32.5
|