Skip to content
Automatic slug field for Django. Mirror of https://gitlab.com/dspechnikov/django-slugger
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/slugger
tests
.bumpversion.cfg
.coveragerc
.gitignore
.gitlab-ci.yml
AUTHORS
CHANGELOG.md
CONTRIBUTING.md
LICENSE
MANIFEST.in
README.md
pytest.ini
setup.cfg
setup.py
tox.ini

README.md

django-slugger

pipeline status coverage report pypi version license python versions django versions

Automatic slug field for Django models.

Features

  • One query to rule them all. No database spam on model save.
  • Supports all standard unique_for field attributes like unique_for_date.
  • Supports model meta unique_together.
  • Supports custom "slugify" functions.

How it works

django-slugger provides AutoSlugField which value is automatically generated if it is not filled manually. If the field has any "uniqueness" constraint (unique=True, for example), numerical suffix will be used if necessary to prevent constraint violation.

If generated slug exceeds field max_length, slug value will be cut to fit in. This does not apply to suffixed slugs. Increase max_length attribute value or use custom slug template if you need more space to ensure slug uniqueness.

Installation

pip install django-slugger

Usage

from slugger import AutoSlugField

class AutoSlugModel(models.Model):
    title = models.CharField(max_length=255)
    slug = AutoSlugField(populate_from='title')

Custom slug template

By default, django-slugger will use Django slugify function (combined with unidecode to handle non-ASCII characters). To use your own function, specify it in slugify argument.

    def custom_slugify(value):
        return 'custom-%s' % value

    class CustomAutoSlugModel(models.Model):
        title = models.CharField(max_length=255)
        slug = AutoSlugField(populate_from='title', slugify=custom_slugify)

Note: slugify argument must be top-level named function.

You can’t perform that action at this time.