31 lines
778 B
Python
31 lines
778 B
Python
import re
|
|
|
|
RE_SLUG_NOTALLOWED = re.compile("[^a-z0-9]+")
|
|
|
|
def slugify(title, used_slugs=[]):
|
|
"""Converts title to a slug.
|
|
|
|
If a list of used slugs is specified, it will make sure the generated slug
|
|
is not one of them.
|
|
|
|
>>> slugify("Hello World!")
|
|
'hello-world'
|
|
>>> slugify("Hello World!", ['hello-world'])
|
|
'hello-world-2'
|
|
>>> slugify("Hello World!", ['hello-world', 'hello-world-2'])
|
|
'hello-world-3'
|
|
"""
|
|
slug = RE_SLUG_NOTALLOWED.sub('-', title.lower()).strip('-')
|
|
used_slugs = set(used_slugs)
|
|
|
|
if slug not in used_slugs:
|
|
return slug
|
|
|
|
count = 2
|
|
while True:
|
|
new_slug = f"{slug}-{count}"
|
|
if new_slug not in used_slugs:
|
|
return new_slug
|
|
count = count+1
|
|
|