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.
Metadata
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 | Provenance | Actions |
|---|---|---|---|---|
| django_pragmatic-7.2.0.tar.gz | 48.9 kB | Without provenance | Details for django_pragmatic-7.2.0.tar.gz |
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
|
Security for django-pragmatic 7.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.