Skip to main content

django-countdown

Tests Docs Python Version PyPI Version License

Display a maintenance countdown banner across a Django site, then block public access (returning HTTP 503) when the countdown expires. Superusers retain access during maintenance so they can finish the work and clear the countdown.

📖 Full documentation: https://iplweb.github.io/django-countdown/

Why?

Planned downtime is the worst kind of downtime to communicate badly. Users land on a half-broken page mid-deploy, hit error logs, file support tickets, and trust erodes. django-countdown lets you announce a maintenance window before it starts (a countdown banner with a real timer), then during the window swap public traffic for an explicit "we're in maintenance" page — while leaving operators unblocked so they can actually finish the work.

Features

  • Pre-maintenance banner — an ultra-visible countdown banner inserted into templates via context processor, with a JS timer that ticks live.
  • Hard cutoff at expiry — middleware returns HTTP 503 and renders a branded blocked page once the countdown lapses.
  • Superuser bypass — admins keep working through the cutoff so they can fix the underlying issue and clear the countdown.
  • Maintenance window — optional maintenance_until lets you set a target end-time; a second banner appears for superusers and the blocked page shows a live countdown to recovery.
  • Per-Site configuration — uses Django's sites framework, so each domain in a multi-tenant setup has its own independent countdown.
  • A command per verbstart_countdown schedules a window, show_countdown reports where it stands (with --json for monitoring), extend_countdown and shorten_countdown move its boundaries when the plan slips, and stop_countdown reopens the site.
  • Dead man's switchextend_countdown --at-least 5m raises a floor rather than adding time, so a deploy loop can hold the site closed while it works and let it reopen by itself if the deploy dies.
  • Admin integration — full Django admin support alongside the commands.

Supported versions

Django 3.10 3.11 3.12 3.13 3.14 Status
5.2 LTS Active LTS (extended support Apr 2028)
6.0 Mainstream Aug 2026, extended Apr 2027

All 8 cells are exercised by the CI matrix on every push. Django is the only runtime dependency.

Installation

uv add django-countdown      # or: pip install django-countdown

Add the app, the middleware and the context processor to your settings:

INSTALLED_APPS = [
    # ...
    "django.contrib.sites",
    "django_countdown",
]
SITE_ID = 1

MIDDLEWARE = [
    # ...
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django_countdown.middleware.CountdownBlockingMiddleware",
]

TEMPLATES = [{
    # ...
    "OPTIONS": {"context_processors": [
        # ...
        "django_countdown.context_processors.countdown_context",
    ]},
}]

Then ./manage.py migrate, and include the banner in your base template:

{% include "django_countdown/countdown_banner.html" %}

Full walkthrough: Installation.

Quick start

./manage.py start_countdown --banner +15m --service +30m \
    --message "Database upgrade" --noinput

Banner shows for 15 minutes, then the site returns 503 for 30 minutes, then reopens by itself. Check on it with ./manage.py show_countdown, and reopen early with ./manage.py stop_countdown. Use --service indefinite to stay closed until you do. See Quickstart.

A working end-to-end example lives under example/.

Documentation

How it works The state machine, who sees what, failure behaviour
Countdown banner Including, styling and overriding the banner
Blocked page Three shipped variants and how to write your own
Scheduling a countdown Every option of start_countdown
Managing a running countdown show, stop, extend, shorten, and the deploy patterns
Multi-site setup One countdown per domain
Reference Settings, model, template context, template blocks

Development

git clone https://github.com/iplweb/django-countdown.git
cd django-countdown
uv sync --all-extras
uv run pytest

See Contributing.

License

MIT — see LICENSE for details.

Download files

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

Source Distribution

django_countdown-0.3.0.tar.gz (52.2 kB view details)

Uploaded Source

Built Distribution

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

django_countdown-0.3.0-py3-none-any.whl (48.4 kB view details)

Uploaded Python 3

File details

Details for the file django_countdown-0.3.0.tar.gz.

File metadata

  • Download URL: django_countdown-0.3.0.tar.gz
  • Upload date:
  • Size: 52.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for django_countdown-0.3.0.tar.gz
Algorithm Hash digest
SHA256 93242bac4c876eb283775df45d67e60d663b4c3307ff8dd64bb83fb566b0303d
MD5 57d6b763cf57f1f26ce9816ddc66dd85
BLAKE2b-256 cde48722853573bfc3df25b5084c790b79a5326dd0291c6409a6d4074763074e

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_countdown-0.3.0.tar.gz:

Publisher: release.yml on iplweb/django-countdown

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

File details

Details for the file django_countdown-0.3.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_countdown-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d0cd8b3abb62a7a361e5b0140dab0fe2bcd835ce075dfb1e2adf5a22df3cc9cc
MD5 c75dc7abab3febc7a2d6471013b38f09
BLAKE2b-256 9719946d436c86eac7b5117332cfad9fdea948e0293dba682e96ed9d1e67b20b

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_countdown-0.3.0-py3-none-any.whl:

Publisher: release.yml on iplweb/django-countdown

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

Release history Release notifications | RSS feed

0.4.0

2 files

0.3.1

2 files

This release

0.3.0 This release

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page