Build Status Pypi codecov Documentation Status

Status page application with browser and REST API interface.


Install the package

pip install django-statusboard

Add the following applications to your Django projects


Update your urlconf:

# myproject/
urlpatterns += [
    url(r'^statusboard/$', include('statusboard.urls')),

Update your database

./manage migrate


You can configure the app using the dict STATUSBOARD in

from django.contrib.staticfiles.templatetags.staticfiles import static
# for Django >= 3.0: from django.templatetags.static import static

    "FAVICON_DEFAULT": static('statusboard/images/statusboard-icon-default.png'),
        0: static('statusboard/images/statusboard-icon-operational.png'),
        1: static('statusboard/images/statusboard-icon-performance.png'),
        2: static('statusboard/images/statusboard-icon-partial.png'),
        3: static('statusboard/images/statusboard-icon-major.png'),
  • INCIDENT_DAYS_IN_INDEX: number of days to show in index (1 = today).
  • OPEN_INCIDENT_IN_INDEX: show not fixed incidents in index, whether or not the incident is older than INCIDENT_DAYS_IN_INDEX.
  • AUTO_REFRESH_INDEX_SECONDS: auto refresh home page every N seconds (0 = disabled).
  • FAVICON_DEFAULT: default favicon.
  • FAVICON_INDEX_DICT: favicon for index, based on the worst status (default: FAVICON_DEFAULT). The keys (0, 1, 2, 3) are the status values (see SERVICE_STATUSES in statusboard/

Customize pages

The following blocks are customizable in statusboard/base.html:

  • title: title of the page
  • branding: branding in fixed navbar
  • bootstrap_theme: bootstrap theme
  • header: header of the page
  • userlinks: links in the header
  • footer: footer div
  • style: CSS files
  • script: JavaScript files

Example: change branding and title

In Django >= 1.9, the templates can be extended recursively (see

Create a statusboard/base.html in one of your templates dir:

{% extends `statusboard/base.html %}

{% block title %}
ACME, Inc.
{% endblock %}

{% block branding %}
<a class="navbar-brand" href="{% url 'statusboard:index' %}">ACME status</a>
{% endblock %}


django-statusboard doesn't provide an out-of-the-box notification system, but it's easy to implement using django signals.

Moreover, django-statusboard tracks the previous status of a service (Service._status).

from django.dispatch import receiver
from django.db.models.signals import post_save
from django.core.mail import mail_admins

from statusboard import Service

@receiver(post_save, sender=Service)
def notify_service_update(sender, instance, **kwargs):
    # Send an email to admins if the service is getting worse, otherwise do nothing.
    if instance.status > instance._status:
        mail_admins("Alert", "Service {} is {}".format(, instance.get_status_display()))


django-statusboard comes with a set of REST API to manage its models, based on Django REST Framework ModelViewSet.

Copyright (C) 2019 Emanuele Di Giacomo

django-statusboard is licensed under GPLv2+.