Generate Markdown API docs from Django/DRF OpenAPI schema for MkDocs
Project description
DRF to MkDocs
Generate beautiful, interactive Markdown API documentation from Django REST Framework OpenAPI schema for MkDocs.
Why you'll love it
- Zero-hassle docs: Beautiful, always-in-sync API docs straight from your codebase
- Model deep dive: Auto-generated model pages with fields, relationships, and choices
- Lightning-fast discovery: Interactive endpoint index with powerful filters and search
- DRF-native: Works with DRF Spectacular; no custom schema wiring needed
- MkDocs Material: Looks great out of the box with the Material theme
Installation
See the full installation guide in docs/installation.md.
Quick Start
- Configure your Django project:
# settings.py
INSTALLED_APPS = [
# ... your other apps
'drf_to_mkdoc',
]
# Required for OpenAPI schema generation
REST_FRAMEWORK = {
'DEFAULT_SCHEMA_CLASS': 'drf_to_mkdoc.utils.schema.AutoSchema', # Use our custom AutoSchema
}
SPECTACULAR_SETTINGS = {
'TITLE': 'Your API',
'DESCRIPTION': 'Your API description',
'VERSION': '1.0.0',
}
DRF_TO_MKDOC = {
'DJANGO_APPS': [
'users',
'products',
'orders',
'inventory',
],
# Optional: Override default paths
# 'DOCS_DIR': 'docs',
# 'CONFIG_DIR': 'docs/configs',
# 'MODEL_DOCS_FILE': 'docs/model-docs.json',
# 'DOC_CONFIG_FILE': 'docs/configs/doc_config.json',
# 'CUSTOM_SCHEMA_FILE': 'docs/configs/custom_schema.json',
}
-
Create MkDocs configuration:
Copy thedocs/mkdocs.ymlfile to your project root and customize it as needed. -
Build documentation:
python manage.py build_docs --settings=docs_settings
Available Commands
build_docs: Build the complete documentation site with MkDocsbuild_endpoint_docs: Build endpoint documentation from OpenAPI schemabuild_model_docs: Build model documentation from model JSON dataextract_model_data: Extract model data from Django model introspection and save as JSONupdate_doc_schema: Update the final schema by copying the documented schema
What you get
See a detailed overview of generated files in docs/structure.md and a feature breakdown in docs/features.md.
How it works
Under the hood, drf-to-mkdoc introspects your models and reads your DRF OpenAPI schema to generate clean, organized Markdown. Then MkDocs turns it into a polished static site. Always current, no manual updates.
Explore more
- Customizing endpoint docs:
docs/customizing_endpoints.md - Serving docs through Django (with permissions):
docs/serving_mkdocs_with_django.md
Dependencies
- Django >= 3.2, < 6.0
- Django REST Framework >= 3.12, < 4.0
- drf-spectacular >= 0.26.0
- PyYAML >= 6.0
- MkDocs >= 1.4.0
- MkDocs Material >= 9.0.0
- coreapi >= 2.3.0
Development
Setup Development Environment
git clone https://github.com/Shayestehhs/drf-to-mkdoc.git
cd drf-to-mkdoc
pip install -e ".[dev]"
Project Structure
drf-to-mkdoc/
├── drf_to_mkdoc/
│ ├── conf/
│ │ ├── defaults.py # Default configuration values
│ │ └── settings.py # Settings management
│ ├── management/
│ │ └── commands/
│ │ ├── build_docs.py # Build MkDocs site
│ │ ├── build_endpoint_docs.py # Build endpoint documentation
│ │ ├── build_model_docs.py # Build model documentation
│ │ ├── extract_model_data.py # Extract model data from Django
│ │ └── update_doc_schema.py # Schema updates
│ └── utils/
│ ├── common.py # Shared utilities
│ ├── endpoint_generator.py # Endpoint documentation
│ ├── model_generator.py # Model documentation
│ └── extractors/ # Query parameter extraction
├── pyproject.toml # Project configuration
└── README.md
License
This project is licensed under the MIT License - see the LICENSE file for details.
Recommendations
.gitignore Configuration
To avoid committing generated files to your repository, add the following to your .gitignore file:
# Documentation
/docs/endpoints/
/docs/models/
/docs/configs/doc-schema.yaml
# Build artifacts
/site/
This will ensure that only the source configuration and scripts are versioned, while the generated documentation is excluded.
docs_settings.py Best Practices
Create a separate docs_settings.py file that inherits from your main settings:
# docs_settings.py
from .settings import *
DRF_TO_MKDOC = {
'DJANGO_APPS': ['your_app1', 'your_app2'],
}
# Other doc settings...
Then use the --settings argument when running the build command:
python manage.py build_docs --settings=docs_settings
Project Organization
your-project/
├── settings.py # Main Django settings
├── docs_settings.py # Documentation-specific settings
├── mkdocs.yml # MkDocs configuration
├── docs/ # Generated documentation (gitignored)
└── site/ # Built site (gitignored)
Contributing
See CONTRIBUTING.md for detailed contribution guidelines. This will ensure that only the source configuration and scripts are versioned, while the generated documentation is excluded.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file drf_to_mkdoc-0.2.3.tar.gz.
File metadata
- Download URL: drf_to_mkdoc-0.2.3.tar.gz
- Upload date:
- Size: 72.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f67df33c2792436234f288512bc85e7da6cefee56de88417209ba510e12712c6
|
|
| MD5 |
018f1b535cb77e87cce04d09d46efa2c
|
|
| BLAKE2b-256 |
cc1afe389162505b1771c736b59b55b7d27f8ef5cd3c516c0de7bde87280556d
|
Provenance
The following attestation bundles were made for drf_to_mkdoc-0.2.3.tar.gz:
Publisher:
publish.yaml on ShayestehHS/drf-to-mkdoc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
drf_to_mkdoc-0.2.3.tar.gz -
Subject digest:
f67df33c2792436234f288512bc85e7da6cefee56de88417209ba510e12712c6 - Sigstore transparency entry: 545755087
- Sigstore integration time:
-
Permalink:
ShayestehHS/drf-to-mkdoc@847b0b0170468bf7f03bce3e6d3c5110a92384c7 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/ShayestehHS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@847b0b0170468bf7f03bce3e6d3c5110a92384c7 -
Trigger Event:
push
-
Statement type:
File details
Details for the file drf_to_mkdoc-0.2.3-py3-none-any.whl.
File metadata
- Download URL: drf_to_mkdoc-0.2.3-py3-none-any.whl
- Upload date:
- Size: 97.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20c4948c4c9a69a63730fa339313bae0016d458e00231c9ffb2a57812b875650
|
|
| MD5 |
9b5ab1d7c3ee3d131d71ad7af4c0f592
|
|
| BLAKE2b-256 |
dec8d917c0998e37d2d101b7e23012f0ae870d4159f352235ab7406b4dc22b2e
|
Provenance
The following attestation bundles were made for drf_to_mkdoc-0.2.3-py3-none-any.whl:
Publisher:
publish.yaml on ShayestehHS/drf-to-mkdoc
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
drf_to_mkdoc-0.2.3-py3-none-any.whl -
Subject digest:
20c4948c4c9a69a63730fa339313bae0016d458e00231c9ffb2a57812b875650 - Sigstore transparency entry: 545755106
- Sigstore integration time:
-
Permalink:
ShayestehHS/drf-to-mkdoc@847b0b0170468bf7f03bce3e6d3c5110a92384c7 -
Branch / Tag:
refs/tags/v0.2.3 - Owner: https://github.com/ShayestehHS
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yaml@847b0b0170468bf7f03bce3e6d3c5110a92384c7 -
Trigger Event:
push
-
Statement type: