Skip to main content
https://badge.fury.io/py/django-charsleft-widget.svg https://img.shields.io/pypi/pyversions/django-charsleft-widget.svg https://img.shields.io/pypi/djversions/django-charsleft-widget.svg https://github.com/bashu/django-charsleft-widget/actions/workflows/test.yml/badge.svg

django-charsleft-widget is a custom widget that limits the number of characters that can be entered in a textarea field.

https://raw.githubusercontent.com/bashu/django-charsleft-widget/develop/showcase.gif

Installation

pip install django-charsleft-widget

External dependencies

  • jQuery - this is not included in the package since it is expected that in most scenarios this would already be available.

Setup

Add charsleft_widget to INSTALLED_APPS:

INSTALLED_APPS += (
    'charsleft_widget',
)

and just include charsleft_widget templates

{% include "charsleft_widget/charsleft_widget_css.html" %} {# Before the closing head tag #}
{% include "charsleft_widget/charsleft_widget_js.html" %} {# Before the closing body tag #}

When deploying on production server, don’t forget to run:

python manage.py collectstatic

Usage

All you need now is to import ClearableInput class and override field’s widget, for example:

from django.forms.fields import CharField

from charsleft_widget import CharsLeftArea

class Form(forms.Form):

    field = CharField(max_length=128, widget=CharsLeftArea)

Please see example application. This application is used to manually test the functionalities of this package. This also serves as a good example.

You need Django 5.2 or above to run that.

License

django-charsleft-widget is released under the BSD license.

Changes

1.1.0 (2026-08-14)

  • Added Django 6.0 and 6.1 support, alongside existing Django 5.2 support (fixes #7).

  • Dropped Python < 3.10 support.

  • Fixed charsleft.js: a page without both jQuery and a django global crashed with ReferenceError: django is not defined; typing past maxlength right on an emoji or other astral character split its UTF-16 surrogate pair and corrupted the field; only keyup/change were handled, so paste-via-mouse and IME input didn’t update the count; dynamically-added widgets (formsets, ajax) were never wired up; and the charsleft helper leaked onto window.

  • Fixed USE_JINJA rendering: textarea.jinja lived under templates/, where Django’s Jinja2 backend (APP_DIRS scans each app’s jinja2/ directory) could never find it; moved it to charsleft_widget/jinja2/.

  • Removed charsleft_widget/fields.py, a pre-Django-1.7 maxlength shim superseded by Django core and unused since.

  • locale/ and jinja2/ assets weren’t declared in package-data and were silently missing from built wheels/sdists; added.

  • Increased test coverage to 100%; added tests for Media, a value already over maxlength, and the Jinja2 backend actually being used.

  • Reformatted code and templates, and fixed ruff lint findings.

1.0.0 (2021-11-30)

  • Added Django 3+ support.

  • Dropped Python 2.7 support.

  • Dropped Django 1.10 / 1.11 support.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_charsleft_widget-1.1.0.tar.gz (12.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_charsleft_widget-1.1.0-py3-none-any.whl (12.9 kB view details)

Uploaded Python 3

File details

Details for the file django_charsleft_widget-1.1.0.tar.gz.

File metadata

  • Download URL: django_charsleft_widget-1.1.0.tar.gz
  • Upload date:
  • Size: 12.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for django_charsleft_widget-1.1.0.tar.gz
Algorithm Hash digest
SHA256 1efa922129a4e2c947bb0dc0e357693609a1bead25e1ce8ee0eb323be7475082
MD5 0d4970bd9fd7f2d868522c600b91c53a
BLAKE2b-256 c8c79fe0fbb71f07cb66fac0d87773fabf7e7c90b5166848076ee221baf1fd98

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_charsleft_widget-1.1.0.tar.gz:

Publisher: release.yml on bashu/django-charsleft-widget

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_charsleft_widget-1.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for django_charsleft_widget-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 1a500958b1c209bb148da1ef314e9b6d0b8d456233aa2cd8248ac0a37e8dd51f
MD5 88abeff2a6f89f7f301bdd7c821d5d0d
BLAKE2b-256 8650fd03c549f822f3af6055aae03b0a9d54202974e6a15844636f9a79a647e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_charsleft_widget-1.1.0-py3-none-any.whl:

Publisher: release.yml on bashu/django-charsleft-widget

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.1.0 This release

2 files

1.0.0

2 files

0.1.9

2 files

0.1.8

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

1 file

0.1.4

1 file

0.1.3

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page