Static site generation
Django Nanopages integrates with django-distill to generate a fully static HTML site from your pages.
This is perfect for blogs, documentation sites, or any content that doesn’t need dynamic server-side rendering. Your pages can still be edited locally through Django admin, but the public site is served as pre-rendered static files.
Installation
Install django-distill next to django-nanopages:
pip install django-distill
Nanopages will detect if django-distill is installed, and will automatically register urls so they’re ready to be built to static content.
With nanodjango
If you’re using nanodjango, generate your static site with nanodjango manage:
nanodjango manage website.py distill-local output/
See the :docs:howto: for a full example.
With standard Django
For a standard Django project:
python manage.py distill-local output/
Build options
The distill-local command supports several useful options. See the
django-distill documentation for full details,
but as a quick reference:
Collect static files automatically:
python manage.py distill-local output/ --collectstatic
Force overwrite - skip confirmation prompts when overwriting existing files:
python manage.py distill-local output/ --force
Deployment
Once you’ve generated your static site, you can deploy it anywhere that serves static files. See the django-distill documentation for full details, but as a quick reference for common deployments:
GitHub Pages
Push your generated output/ directory to a gh-pages branch:
python manage.py distill-local output/
cd output/
git init
git add .
git commit -m "Deploy static site"
git push -f origin main:gh-pages
Cloud storage
Django-distill can publish directly to cloud storage providers.
For example, to publish directly to Amazon S3, install boto3:
pip install boto3
Then configure your deployment target in settings:
# settings.py
DISTILL_PUBLISH = {
'engine': 'django_distill.backends.amazon_s3',
'bucket': 'your-bucket-name',
'region': 'us-east-1',
'access_key_id': os.environ['AWS_ACCESS_KEY_ID'],
'secret_access_key': os.environ['AWS_SECRET_ACCESS_KEY'],
}
Then publish:
python manage.py distill-publish
This automatically syncs your static site to S3, removing old files and uploading new ones.
Google Cloud Storage and Azure use similar configuration.