Skip to main content

utils-plus

A simple reusable Django app with various mixins and utility functions.


PyPi Version Python Version


Installation

install the package using the below command

pip install django-utils-plus

or install the development version using

pip install git://github.com/jnoortheen/django-utils-plus.git@master#egg=django-utils-plus

Utils

Management Commands

  • clear_records
  • create_admin
  • test_mail
  • cleardata
  • create_middleware

Template tags

  1. klass
  2. unpkg
  3. jsdelivr (combined support as well)

serve static files using npm

it is convenient to keep track of all external js libraries in project using a package.json. It is used to keep latest version of available packages. The following template tags can be used to serve these packages right from CDN on production and node_modules during development

unpkg

Alternative to standard static template tag. When you are using external static files/libraries like bootstrap, jquery you may want to load them from CDNs instead of managing them yourself in production. This tag helps you to do that. When settings.DEBUG is false, this will return paths that resolved from package.json to versioned unpkg.com. Otherwise it will resolve to node_modules locally.

jsdelivr

like `unpkg` adds support for using https://www.jsdelivr.com/

Usage:

load the template tags and use unpkg like static tag,

{% load static utils_plus_tags %}
<link rel="stylesheet" type="text/css" href="{% unpkg 'bootstrap/dist/css/bootstrap.min.css' %}"/>
<script src="{% unpkg 'bootstrap/dist/js/bootstrap.min.js' %}"></script>
<script src="{% unpkg 'jquery/dist/jquery.min.js' %}"></script>

Note:

  1. the package.json should be present in the project ROOT DIR.
  2. When DEBUG is True the packages must be installed and should be available already inside node_modules.

Middleware

  • login_required_middleware

Urls & Routing with ease

An elegant and DRY way to define urlpatterns. It has easier to nest many levels deeper and still have the readability. It is just a wrapper behind the standard url(), include() methods.

This is how your urls.py may look

### urls.py ###
urlpatterns = [
    url(r'^studenteditordocument/(?P<doc_pk>\d+)/edit/$', EditView.as_view(), name='edit-student-doc'),
    url(r'^studenteditordocument/(?P<doc_pk>\d+)/export/$', ExportView.as_view(), name='export-editore-doc'),

    url(r'^docs/$', Docs.as_view(), name='student-documents'),
    url(r'^publish/$', PulishOrDelete.as_view(), {'action': 'publish'}, name="publish_document"),
    url(r'^delete/$', PulishOrDelete.as_view(), name='delete_document'),
]

after using Url

### urls.py ###

from utils_plus.router import url

urlpatterns = list(
        url('editor')[
            url.int('doc_pk')[
                url('edit', DocEditorView.as_view(), 'edit-doc'),
                url('export', DocExporterView.as_view(), 'export-doc'),
            ]
        ]
        + url('docs', Docs.as_view(), 'student-documents')
        + url('publish', DeleteOrPublistDocument.as_view(), 'publish_document', action='publish')
        + url('delete', DeleteOrPublistDocument.as_view(), 'delete_document')

see tests/test_router.py for more use cases

Model

  1. CheckDeletableModelMixin adds a is_deletable method which then can be used to check any affected related records before actually deleting them. originally it is copied from this gist

  2. ChoicesEnum Enumerator class for use with the django ORM choices field

  3. QueryManager A DRYer way to set select_related, prefetch_related & filters to queryset.

    • this has first_or_create method similar to get_or_create
from django.db import models
from utils_plus.models import QueryManager

class Post(models.Model):
    author = models.ForeignKey('Author')
    comments = models.ManyToManyField('Comment')
    published = models.BooleanField()
    pub_date = models.DateField()
    
    # custom managers
    objects = QueryManager() # equivalent to models.Manager
    public_posts = QueryManager(published=True).order_by('-pub_date')
    rel_objects = QueryManager().selects('author').prefetches('comments')

Config Option

  1. URL_GROUP_TRAIL_SLASH
    • By default all the urls generated by this class will have trailing slash
    • Set this to False in settings.py to change this behaviour

Views

  1. CreateUpdateView:
    • combines CreateView and UpdateView

Testing the project

- clone the repo and run migrations after installing dependencies
- `inv test` will run all the test for the app

Development

Install dependencies

uv sync
make lint test

Release

To publish a new release:

  1. Create a new release on GitHub and tag it with a version number (e.g., v0.7.5)
  2. The workflow will automatically run tests, linting, and publish to PyPI

Metadata

Release files for django-utils-plus 0.7.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-utils-plus 0.7.6
File Size Uploaded
django-utils-plus-0.7.6.tar.gz 30.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-utils-plus 0.7.6
File Interpreter ABI Platform
django_utils_plus-0.7.6-py3-none-any.whl Python 3 none any Details

Total release size: 53.3 kB

Release files / django-utils-plus-0.7.6.tar.gz

Download URL django-utils-plus-0.7.6.tar.gz
Size 30.2 kB
Tags Source
SHA-256 checksum
How to use checksums
229209060eb8d60a72c8b1f8eb06d9c5ca689c464a14f20ff62c606b40e9f39f
BLAKE2b-256 checksum
How to use checksums
19b2f93be2a63611db9edff1ef751eccdb2a5c3096e5a977e527d3728fee2914
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.

Transparency log

Release files / django_utils_plus-0.7.6-py3-none-any.whl

Download URL django_utils_plus-0.7.6-py3-none-any.whl
Size 23.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
708174b15a9b619a38e79e1a1c7658501cab29e0d77f5b3c37984855128261ea
BLAKE2b-256 checksum
How to use checksums
203823131700fd7d289b803a830400916279d74c5a9c064465b4d0792d98f339
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 16, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.7.6 This release

2 release files

0.7.4

2 release files

0.7.3

2 release files

0.7.2

2 release files

0.6.9

2 release files

0.6.8

1 release file

0.6.7

1 release file

0.6.6

1 release file

0.6.5

1 release file

0.6.4

1 release file

0.6.3

1 release file

0.6.2

1 release file

0.6.1

1 release file

0.6

1 release file

0.5.5

1 release file

0.5.4

1 release file

0.5.3

1 release file

0.5.2

1 release file

0.5.1

1 release file

0.5

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page