wagtail-comments-report
A Wagtail admin report that lists every page comment across the site in one place, with filters and dedup.
Why
Wagtail puts comments inside each page's edit view. There is no built-in way to scan all open comments across the whole site, which makes it easy to forget about open threads on pages you rarely touch.
This package adds a Comments entry under Reports in the Wagtail admin showing:
- Comment text, page, author, date, and Open / Resolved status, ordered newest first.
- Filters: author, page, date range, and a tri-state Status (Open / Resolved / All) that defaults to Open so editors land on outstanding comments first.
- CSV / XLSX export (provided by Wagtail's
SpreadsheetExportMixin), including Edit URL and Live URL columns linking to the page editor and the published page — clickable in XLSX. - Automatic deduplication of
Commentrows that Wagtail can stash at the same(page, user, contentpath)as a side effect of revision saves — only the most recent row per logical comment is shown.
Install
pip install wagtail-comments-report
Add the app to INSTALLED_APPS (after wagtail.admin so the report
URLs and menu hooks are picked up):
INSTALLED_APPS = [
# ...
"wagtail.admin",
"wagtail",
"wagtail_comments_report",
# ...
]
No migrations are required — the report reads wagtail.models.Comment
directly.
Configuration
None required. The report appears under Reports > Comments in the Wagtail admin to any user with admin access.
The status filter defaults to Open. To link directly to all
comments (or only resolved), pass ?status=all or ?status=resolved
on the URL.
The export has two URL columns: Edit URL (the page editor — the same target as the report table's page link) and Live URL (the published page; empty when the page isn't routable under any Site). Both are clickable hyperlinks in the XLSX export.
Compatibility
The package itself has no hard pins on Django or Wagtail — pip will
install on whatever you've got. What's actively tested in CI (defined
in pyproject.toml under [tool.hatch.envs.hatch-test]):
- Python 3.10, 3.11, 3.12, 3.13, 3.14
- Django 5.2 and 6.0
- Wagtail 6.4+ (with Django 5.2) and Wagtail 7.x (with Django 5.2 or 6.0)
- Postgres or SQLite (the dedup uses portable
Max("id")aggregation, notDISTINCT ON)
Combinations not exercised: Django 6 needs Python 3.12+, and Wagtail 6 doesn't run on Django 6. The matrix excludes those.
It will probably work on older Wagtail/Django too — those just aren't in the matrix. If you find a real incompatibility, open an issue or a PR with a CI matrix entry.
Development
The test matrix is managed by Hatch and
defined in pyproject.toml under [tool.hatch.envs.hatch-test]. The
fastest way to drive it is with uv:
# run the full matrix (note --all; without it hatch only runs ONE env)
uvx hatch test --all
# run one cell
uvx hatch test --include "python=3.13" --include "wagtail=7"
# filter pytest across the whole matrix
uvx hatch test --all -k test_report_dedupes
# lint
uvx hatch fmt --check
If you'd rather skip the matrix and just run pytest in one interpreter:
uv sync --extra test
uv run pytest src/
Release files for wagtail-comments-report 1.1.0
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_comments_report-1.1.0.tar.gz | 8.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| wagtail_comments_report-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.1 kB
Release files / wagtail_comments_report-1.1.0.tar.gz
| Download URL | wagtail_comments_report-1.1.0.tar.gz |
|---|---|
| Size | 8.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c0b3534384a5d4dcf1af2e0fa05934019a42fdb9c5d4f03d198f7c27e3822af6
|
|
BLAKE2b-256 checksum How to use checksums |
0e2e9070bf3b2ec97e7077453e23cc698b0ef6c36cd774fe055e68238d385099
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency logRelease files / wagtail_comments_report-1.1.0-py3-none-any.whl
| Download URL | wagtail_comments_report-1.1.0-py3-none-any.whl |
|---|---|
| Size | 9.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fe518d8351df01720aee1b05211371e9ae3e09cdcd18928eb7167022ee7ab8e8
|
|
BLAKE2b-256 checksum How to use checksums |
86aff8eca81ab6d0b1c65330bfa8efc1cf2bd184d8c837d66896eba55f874062
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 11, 2026.
Transparency log