skip to navigation
skip to content

django-slugify-processor 0.8.4

pipeline for slugification edgecases in django

django_slugify_processor: pipeline for handling slugification edgecases

What are slugs?

Slugs are URL’s, typically generated from post titles, that you want to be both human readable and a valid URL. They are SEO friendly.

Django provides a slugify function in django.utils.text.slugify which is also made available as a default filter.

Django slugs can be automatically generated in django models via packages such as:

The problem

This project is based on an article from covering django’s import strings.

Corner cases exist with slugification. For instance:

Term django.utils.text.slugify What you want
C c (correct) n/a
C++ c cpp
C# c c-sharp

To make matters worse, if using a specialized model field like AutoSlugField from django-autoslug or django-extensions, the default behavior may be to name the slugs for C++ and C# to “c-1”, “c-2” after “c” is taken.

Here’s another case, acronyms / shorthands:

Term django.utils.text.slugify What you (may) want
New York City new-york-city nyc
Y Combinator y-combinator yc
Portland portland pdx
Texas texas tx
$ ” (empty) usd, aud, etc?
US$ us usd
A$ a aud
bitcoin bitcoin btc
United States united-states usa
League of Legends league-of-legends league
Apple® iPod Touch apple-ipod-touch ipod-touch

Each website and niche has its own edge cases for slugs. So we need a solution that can scale, where you can craft your own functions.

How django-slugify-processor helps

This builds on top of django.utils.text.slugify to handle your django project’s edgecases. By default, django-slugify-processor will be a pass through to django’s default behavior. Adding slugification functions via your Django project’s settings file allows you to adjust.


$ pip install django-slugify-processor


To create a processor, create a function that accepts a string, and returns a string. Assume this is project/app/

def my_processor(value):
   value = value.replace('++', 'pp')
   return value

Inside of your settings, add a SLUGIFY_PROCESSORS list of strings that points to the function. Anything that’s compatible with import_string, in your settings file:



In normal django code

Import slugify from django_slugify_processor.text:

from django_slugify_processor.text import slugify

> 'cpp'

Template code

django-slugify-processor is designed to override the built-in“slugify“ filter.

via load

You can load by default via {% load django_slugify_processor %} in your template.

In your settings INSTALLED_APPS:


In your template:

{% load slugify_processor %}

via built-in

To make this available in all templates, in the OPTIONS of your template engine, add django_slugify_processor.template_tags:

    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'OPTIONS': {
        'builtins': [

From within the template file:


Output should be: cpp


For the most up to date documentation, view the documetation for the plugin you’re using (e.g. django-autoslug or django-extensions).

To use django-slugify-processor’s slugify instead of django’s default, there will be a field option to use the function.


Tested with 1.9.7 (2017-11-26):

from django.db import models

from django_extensions.db.fields import AutoSlugField
from django_slugify_processors.text import slugify

class MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug = AutoSlugField(


Tested with 1.9.3 (2017-11-26):

from django.db import models

from autoslug import AutoSlugField
from django_slugify_processors.text import slugify

class MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug = AutoSlugField(


  • travis.yml and tox.ini based off DRF’s (BSD 2-clause licensed)
  • yapf configuration based off RTD /’s (MIT-licensed)

Project details

python support 2.7, >= 3.3, pypy, pypy3
django support 1.11
Test Coverage
Open Hub
License MIT
git repo
$ git clone
install stable
$ pip install django-slugify-processor
install dev
$ git clone
$ cd ./django-slugify-processor
$ pipenv install --dev --skip-lock
$ pipenv shell
$ make test
File Type Py Version Uploaded on Size
django-slugify-processor-0.8.4.tar.gz (md5) Source 2017-12-03 7KB