Pragmatic tools and utilities for Django projects
Project description
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.
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
django_pragmatic-7.0.0.tar.gz
(48.3 kB
view details)
File details
Details for the file django_pragmatic-7.0.0.tar.gz.
File metadata
- Download URL: django_pragmatic-7.0.0.tar.gz
- Upload date:
- Size: 48.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf19d98b5bd117a88083c911623b535c6a0853c35777b9b5248e3f14dd5bc743
|
|
| MD5 |
d2188f000968646aa963a1675802d418
|
|
| BLAKE2b-256 |
4fe419584fb7662b12f1123895bf4f1ec9c22754ee68273c84980d2b8b4169c0
|