Display registered Django signals and receivers, showing what fires and where.
Project description
Django Signals Panel
See every Django signal and receiver, and where they fire. Right from the Django admin.
Compatible with dj-control-room. Register this panel in the Control Room to manage it from a centralized dashboard.
- Official site: djangocontrolroom.com
- Project repo: dj-control-room
Docs
https://yassi.github.io/dj-signals-panel/
Features
- Signal discovery - automatically discovers all registered Django signals across your project and installed apps
- Receiver inspection - lists every connected receiver for each signal, including function name, module, file location, sender, and dispatch UID
- Source code viewer - inline syntax-highlighted source for each receiver, directly in the admin
- Search & filter - search signals by name, module, or app; filter by app with a dropdown
- Summary stats - at-a-glance counts for total signals, total receivers, and signals with no receivers
- Dark mode support - respects Django admin's built-in dark/light mode toggle
- No migrations required - purely read-only introspection, zero database changes
Project Structure
dj-signals-panel/
├── dj_signals_panel/ # Main package
│ ├── templates/ # Django templates
│ ├── views.py # Django views
│ └── urls.py # URL patterns
├── example_project/ # Example Django project
├── tests/ # Test suite
├── images/ # Screenshots for README
└── requirements.txt # Development dependencies
Requirements
- Python 3.9+
- Django 4.2+
Django Control Room
Dj Signals Panel works great on its own, and it also pairs seamlessly as a panel inside Django Control Room - a centralized dashboard that brings all your Django admin panels together in one place.
pip install dj-control-room dj-signals-panel
Visit djangocontrolroom.com to learn more.
Screenshots
Django Admin Integration
Seamlessly integrated into your Django admin interface. A DJ SIGNALS PANEL section appears alongside your models - no migrations required.
| Light | Dark |
|---|---|
Signal List & Search
Browse all registered signals with summary stats (total signals, total receivers, signals with no receivers). Search by name, module, or app, and filter by app using the dropdown.
| Light | Dark |
|---|---|
Signal Detail
Drill into any signal to see its metadata and every connected receiver - including function name, module, file path, sender, and dispatch UID. Expand View Source to see syntax-highlighted source code inline.
Note: The source code viewer is opt-in. Set
SHOW_SOURCE: TrueinDJ_SIGNALS_PANEL_SETTINGSto enable it. UseSIGNAL_MODULESto add extra modules to signal discovery.
| Light | Dark |
|---|---|
Installation
1. Install the Package
pip install dj-signals-panel
2. Add to Django Settings
Add dj_signals_panel to your INSTALLED_APPS:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'dj_signals_panel', # Add this line
# ... your other apps
]
3. Configure Settings (Optional)
Add any custom configuration to your Django settings if needed:
DJ_SIGNALS_PANEL_SETTINGS = {
# Set True to render syntax-highlighted source code for each receiver
'SHOW_SOURCE': False,
# Extra modules to include in signal discovery (additive, not restrictive)
'SIGNAL_MODULES': [], # e.g. ['myapp.signals', 'otherapp.events']
'LOAD_DEFAULT_CSS': True, # Set False to skip built-in styles
# Static paths are relative to app's static/ dir (e.g. 'myapp/css/overrides.css'
# for a file at myapp/static/myapp/css/overrides.css). Full URLs also accepted.
'EXTRA_CSS': [],
}
4. Include URLs
Add the Panel URLs to your main urls.py:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/dj-signals-panel/', include('dj_signals_panel.urls')), # Add this line
path('admin/', admin.site.urls),
]
5. Run Migrations and Create Superuser
python manage.py migrate
python manage.py createsuperuser # If you don't have an admin user
6. Access the Panel
-
Start your Django development server:
python manage.py runserver
-
Navigate to the Django admin at
http://127.0.0.1:8000/admin/ -
Look for the "DJ SIGNALS PANEL" section in the admin interface
Development Setup
If you want to contribute to this project or set it up for local development:
Prerequisites
- Python 3.9 or higher
- Docker
It is reccommended that you use docker since it will automate much of dev env setup
1. Clone the Repository
git clone https://github.com/yassi/dj-signals-panel.git
cd dj-signals-panel
2a. Set up dev environment using virtualenv
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e . # install dj-signals-panel package locally
pip intall -r requirements.txt # install all dev requirements
# Alternatively
make install # this will also do the above in one single command
2b. Set up dev environment using docker
make docker_up # bring up all services (redis, memached) and dev environment container
make docker_shell # open up a shell in the docker conatiner
3. Set Up Example Project
The repository includes an example Django project for development and testing
cd example_project
python manage.py migrate
python manage.py createsuperuser
4. Run the Development Server
python manage.py runserver
Visit http://127.0.0.1:8000/admin/ to access the Django admin with Dj Signals Panel.
5. Running Tests
The project includes a comprehensive test suite. You can run them by using make or by invoking pytest directly:
# build and install all dev dependencies and run all tests inside of docker container
make test_docker
# Test without the docker on your host machine.
# note that testing always requires a redis and memcached service to be up.
# these are mostly easily brought up using docker
make test_local
License
This project is licensed under the MIT License. See the LICENSE file for details.
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 dj_signals_panel-0.2.0.tar.gz.
File metadata
- Download URL: dj_signals_panel-0.2.0.tar.gz
- Upload date:
- Size: 70.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d02509e86c1aeefcf8c5ee37462ca25d2fb536c2e4ec471c1ebf1417a29c127f
|
|
| MD5 |
72645098beae18ff8545da64d64a4dbf
|
|
| BLAKE2b-256 |
322fce73968eb58e675d3ae5fbd7181d4c89e9a5aa5456936bbd8808a77e1cb2
|
Provenance
The following attestation bundles were made for dj_signals_panel-0.2.0.tar.gz:
Publisher:
python-publish.yml on yassi/dj-signals-panel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dj_signals_panel-0.2.0.tar.gz -
Subject digest:
d02509e86c1aeefcf8c5ee37462ca25d2fb536c2e4ec471c1ebf1417a29c127f - Sigstore transparency entry: 1226862051
- Sigstore integration time:
-
Permalink:
yassi/dj-signals-panel@9e5fb7fee0b757679da0eedb40372edd01edae19 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/yassi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@9e5fb7fee0b757679da0eedb40372edd01edae19 -
Trigger Event:
release
-
Statement type:
File details
Details for the file dj_signals_panel-0.2.0-py3-none-any.whl.
File metadata
- Download URL: dj_signals_panel-0.2.0-py3-none-any.whl
- Upload date:
- Size: 65.3 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 |
bb39316736e25d9b7ae6da33ad5c1745927c714f3ea7326c52ae2c7e6d6cc608
|
|
| MD5 |
6075de9f5cc9165be1177b58ab113a82
|
|
| BLAKE2b-256 |
163024e73e27d9c126f4ed9b070975faa3ea233a1157c8910e5fb45caee4ed99
|
Provenance
The following attestation bundles were made for dj_signals_panel-0.2.0-py3-none-any.whl:
Publisher:
python-publish.yml on yassi/dj-signals-panel
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dj_signals_panel-0.2.0-py3-none-any.whl -
Subject digest:
bb39316736e25d9b7ae6da33ad5c1745927c714f3ea7326c52ae2c7e6d6cc608 - Sigstore transparency entry: 1226862093
- Sigstore integration time:
-
Permalink:
yassi/dj-signals-panel@9e5fb7fee0b757679da0eedb40372edd01edae19 -
Branch / Tag:
refs/tags/0.2.0 - Owner: https://github.com/yassi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
python-publish.yml@9e5fb7fee0b757679da0eedb40372edd01edae19 -
Trigger Event:
release
-
Statement type: