django-pragmatic
Pragmatic tools and utilities for Django projects.
Requirements
- Python 3.8+
- Django 3.2+
- django-filter
- python-pragmatic
Optional dependencies are required only for the modules that use them (see Installation).
Installation
pip install django-pragmatic
Add pragmatic to INSTALLED_APPS:
INSTALLED_APPS = [
...
'pragmatic',
]
Run migrations (needed only if you use deleted-object tracking):
python manage.py migrate pragmatic
What's included
| Module | Description |
|---|---|
| Models | DeletedObject — audit trail for deleted instances |
| Mixins | CBV/form mixins: permissions, delete, pagination, sorting, display modes, PDF, slugs |
| Decorators | permissions_required, permission_required, PostgreSQL lock, Cached |
| Template tags | {% load pragmatic_tags %} — filter display, sorting, pagination, URL tools |
| Fields | RangeField, SliderField, MultiSelectField, ChoiceArrayField |
| Filters | SliderFilter, OneFieldRangeFilter, ArrayFilter and more |
| Widgets | GroupedCheckboxSelectMultiple, SliderWidget, map widgets |
| Middleware | MaintenanceModeMiddleware — serve 503 during downtime |
| Managers | EmailManager — template-based email with optional RQ queue |
| Context processors | Date formats, installed apps, URL identifier, settings |
| Signals | SignalsHelper, apm_custom_context, disable_signals |
| Utils | build_absolute_uri, get_task_decorator, zip compression |
| Jobs | Background email via RQ, ConnectionClosingWorker |
| REST Framework | ContentTypeSerializer, HybridRouter, BearerAuthentication |
| Management commands | clean_migrations, rqscheduler |
Quick examples
Maintenance mode:
# settings.py
MAINTENANCE_MODE = True
MAINTENANCE_MODE_BYPASS_USERS = [1] # superuser can still log in
Send an email from a template:
from pragmatic.managers import EmailManager
EmailManager.send_mail(
to=user,
template_prefix='emails/welcome',
subject='Welcome!',
data={'activation_link': url},
request=request,
)
List view with display modes and sorting:
from pragmatic.mixins import DisplayListViewMixin, SortingListViewMixin
class ArticleListView(SortingListViewMixin, DisplayListViewMixin, ListView):
model = Article
displays = ['list', 'table']
paginate_by_display = {'list': [10, 25], 'table': 100}
sorting_options = {'-created': 'Newest', 'title': 'Title A–Z'}
Template filter values display:
{% load pragmatic_tags %}
{% filter_values filter %}
{% num_applied_filters filter request.GET as n %}
{{ n }} active filter{{ n|pluralize }}
Background task decorator:
# settings.py
PRAGMATIC_TASK_DECORATOR = 'django_rq.job' # or 'celery.shared_task'
from pragmatic.utils import get_task_decorator
task = get_task_decorator(queue='default')
@task
def process_export(export_id):
...
Documentation
Full documentation is at django-pragmatic.readthedocs.io.
License
BSD License — see LICENSE for details.
Release files for django-pragmatic 7.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_pragmatic-7.2.0.tar.gz | 48.9 kB | Details |
Release files / django_pragmatic-7.2.0.tar.gz
| Download URL | django_pragmatic-7.2.0.tar.gz |
|---|---|
| Size | 48.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b76350f9d587f1aac50e33dd778b48483fc255357d4999df9fa1a4b868fa25e
|
|
BLAKE2b-256 checksum How to use checksums |
f53f5ba41d5cd1ce44e6f343c7678ed5046243545f24f987980cc410585159ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|