Skip to main content

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

  1. 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',
}
  1. Create MkDocs configuration:
    Copy the docs/mkdocs.yml file to your project root and customize it as needed.

  2. Build documentation:

python manage.py build_docs --settings=docs_settings

Available Commands

  • build_docs: Build the complete documentation site with MkDocs
  • build_endpoint_docs: Build endpoint documentation from OpenAPI schema
  • build_model_docs: Build model documentation from model JSON data
  • extract_model_data: Extract model data from Django model introspection and save as JSON
  • update_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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf_to_mkdoc-0.2.3.tar.gz (72.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

drf_to_mkdoc-0.2.3-py3-none-any.whl (97.0 kB view details)

Uploaded Python 3

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

Hashes for drf_to_mkdoc-0.2.3.tar.gz
Algorithm Hash digest
SHA256 f67df33c2792436234f288512bc85e7da6cefee56de88417209ba510e12712c6
MD5 018f1b535cb77e87cce04d09d46efa2c
BLAKE2b-256 cc1afe389162505b1771c736b59b55b7d27f8ef5cd3c516c0de7bde87280556d

See more details on using hashes here.

Provenance

The following attestation bundles were made for drf_to_mkdoc-0.2.3.tar.gz:

Publisher: publish.yaml on ShayestehHS/drf-to-mkdoc

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for drf_to_mkdoc-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 20c4948c4c9a69a63730fa339313bae0016d458e00231c9ffb2a57812b875650
MD5 9b5ab1d7c3ee3d131d71ad7af4c0f592
BLAKE2b-256 dec8d917c0998e37d2d101b7e23012f0ae870d4159f352235ab7406b4dc22b2e

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page