django-admin-wiki
Collaborative staff wiki for Django Admin — edit in the browser, search with Postgres.
A reusable Django app for internal / back-office documentation next to django.contrib.admin.
Not a public MediaWiki clone.
Features
- In-browser WYSIWYG editing (Summernote by default; switchable to textarea or a custom widget)
- Up to three-level navigation tree
- Full-text search (PostgreSQL FTS) with SQLite/MySQL substring fallback
- Revision history on every staff save
- Import from Markdown / MkDocs (
import_mkdocs) - Visible link from Django admin (Wiki pages changelist)
- Premium cloud mode: Hosted on our servers via API (no local wiki tables)
Requirements
- Python ≥ 3.10
- Django ≥ 4.2, < 6
- PostgreSQL recommended for production search (
django.contrib.postgres) whenSTORAGE="local"
Install (5 minutes) — self-hosted (OSS)
pip install django-admin-wiki
# settings.py
INSTALLED_APPS = [
...,
"django.contrib.postgres", # if using Postgres FTS
"django_summernote", # required for default WYSIWYG editor
"django_admin_wiki",
]
MEDIA_URL = "/media/"
MEDIA_ROOT = BASE_DIR / "media"
DJANGO_ADMIN_WIKI = {
"STORAGE": "local",
"SEARCH_BACKEND": "postgres", # or "fallback"
"SEARCH_CONFIG": "french",
"EDITOR": "summernote",
"ALLOW_MARKDOWN_READ": True,
"DOCS_DIR": BASE_DIR / "wiki_docs",
"MKDOCS_YML": BASE_DIR / "wiki_docs" / "mkdocs.yml",
"URL_PREFIX": "wiki/",
# Media: default local FS under DOCS_DIR/uploads via POST /wiki/media/upload/
# "MEDIA_BACKEND": "django", # use Django STORAGES (S3) instead
# "MEDIA_MAX_UPLOAD_BYTES": 5 * 1024 * 1024,
}
Images in the editor are uploaded as files (no base64 in the database). Optional S3 for self-hosted:
pip install "django-admin-wiki[s3]"
# settings — host-owned bucket
INSTALLED_APPS += ["storages"]
STORAGES = {
"default": {
"BACKEND": "storages.backends.s3.S3Storage",
"OPTIONS": { ... },
},
"staticfiles": {"BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage"},
}
DJANGO_ADMIN_WIKI = {..., "MEDIA_BACKEND": "django"}
# urls.py
path("summernote/", include("django_summernote.urls")),
path("wiki/", include("django_admin_wiki.urls")),
python manage.py migrate
python manage.py setup_wiki_groups # creates "Wiki readers" + "Wiki editors"
python manage.py runserver
Then assign users to a group in Django Admin → Users (or Groups). is_staff alone does not grant wiki access.
Premium — cloud storage (no local wiki tables)
Subscribe at django-admin-wiki.enprod.fr. You receive write and read-only API keys from the account dashboard.
INSTALLED_APPS = [..., "django_summernote", "django_admin_wiki"]
# Prevent host migrate from creating wiki tables:
MIGRATION_MODULES = {"django_admin_wiki": None}
DJANGO_ADMIN_WIKI = {
"STORAGE": "cloud",
"CLOUD_API_URL": "https://django-admin-wiki.enprod.fr",
"CLOUD_API_KEY": "daw_live_...", # write key (editors)
"CLOUD_API_KEY_READ": "daw_live_...", # read-only key (readers)
"EDITOR": "summernote",
}
path("summernote/", include("django_summernote.urls")),
path("wiki/", include("django_admin_wiki.urls")),
# Do NOT run migrations for django_admin_wiki
Isolation: every API request is scoped by the tenant bound to your API key. Tenant A cannot read Tenant B data.
Read vs write (client Django users)
| URL | Who can enter |
|---|---|
/admin/ |
Django Admin → needs is_staff (always) |
/wiki/ |
membership in Wiki readers or Wiki editors (not is_staff) |
Rights follow the logged-in user of your Django project (session cookie). Cloud SaaS accounts (email/password on the Premium site) only manage billing / API keys.
After migrate (or python manage.py setup_wiki_groups), two groups exist:
| Group | Can |
|---|---|
| Wiki readers | open /wiki/, search, view pages |
| Wiki editors | readers + create / edit / upload media |
Assign users in Django Admin → Users. Superusers always have full wiki access.
Premium cloud mode — dual API keys
The host app holds two keys; the package picks one from request.user:
| User group | Key used |
|---|---|
Wiki editors (wiki_can_write) |
CLOUD_API_KEY |
| Wiki readers | CLOUD_API_KEY_READ |
Create both keys from the account dashboard. The cloud API rejects writes on a read-only key.
See docs/PREMIUM.md.
Change the editor
DJANGO_ADMIN_WIKI = {"EDITOR": "textarea"} # or "custom" + EDITOR_WIDGET
Import existing MkDocs docs (local mode)
python manage.py import_mkdocs
python manage.py refresh_wiki_search_vectors # Postgres
Settings reference
| Key | Default | Description |
|---|---|---|
STORAGE |
"local" |
"local" (host DB) or "cloud" (Premium API) |
CLOUD_API_URL |
"" |
Base URL of the cloud API |
CLOUD_API_KEY |
"" |
Bearer write key daw_live_… |
CLOUD_API_KEY_READ |
"" |
Bearer read-only key (readers in cloud mode) |
SEARCH_BACKEND |
"postgres" |
local mode only |
SEARCH_CONFIG |
"french" |
local Postgres FTS config |
EDITOR |
"summernote" |
summernote, textarea, or custom |
EDITOR_WIDGET |
None |
Dotted path when EDITOR="custom" |
ALLOW_MARKDOWN_READ |
True |
Convert legacy Markdown on read |
DOCS_DIR / MKDOCS_YML |
wiki_docs |
MkDocs import (local) |
HOME_SLUG |
"index" |
Home page slug |
URL_PREFIX |
"wiki/" |
Link rewrite prefix for import |
MAX_NAV_DEPTH |
3 |
Max menu depth (root → …) |
Breaking choices (v1)
- Postgres recommended for local FTS; SQLite uses fallback search
- Summernote is the default editor
- Navigation is up to three levels (root → section → page)
- Cloud mode uses shared DB with
tenant_idisolation (not DB-per-customer)
Example project
From the repository root:
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cd example_project
python manage.py migrate
python manage.py setup_wiki_groups
python manage.py import_mkdocs
python manage.py createsuperuser
python manage.py runserver
See example_project/README.md.
License
See CHANGELOG.md for release notes.
BSD-3-Clause (OSS / local mode). Premium cloud hosting is a commercial subscription.
Metadata
Release files for django-admin-wiki 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django_admin_wiki-0.1.1.tar.gz | 32.0 kB | With provenance | Details for django_admin_wiki-0.1.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| django_admin_wiki-0.1.1-py3-none-any.whl | Python 3 | none | any | Details for django_admin_wiki-0.1.1-py3-none-any.whl |
Total release size: 72.4 kB
Release files / django_admin_wiki-0.1.1.tar.gz
| Download URL | django_admin_wiki-0.1.1.tar.gz |
|---|---|
| Size | 32.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
37bbc417a17ea93943483f83b019fb467c5c12cd2039ab44a669abf7aef742da
|
|
BLAKE2b-256 checksum How to use checksums |
786664c98f7905779f069cd3e4e22bc7924e96b4b1e9f419d327fdfa1a2ad01d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.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 Jul 23, 2026.
Transparency logRelease files / django_admin_wiki-0.1.1-py3-none-any.whl
| Download URL | django_admin_wiki-0.1.1-py3-none-any.whl |
|---|---|
| Size | 40.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d7213bf12d6c4f2faefdab3ef40aaf85578a5426c4c333cc1b0fb2cdc749a833
|
|
BLAKE2b-256 checksum How to use checksums |
55539757f0317236b8fa780c8d22ffc60a24bd7389e858928e9bdbee559d05e4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.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 Jul 23, 2026.
Transparency logSecurity for django-admin-wiki 0.1.1
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.
Full provenance
Both files in this release have been uploaded with provenance metadata.
Attestation for django_admin_wiki-0.1.1.tar.gz
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 Jul 23, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.