Added a modified slugify function and template filter, which converts slashes to dashes instead of eliding them. This is necessary in order to be able to distinguish the slugified room names like 'Schinkel I/II' from 'Schinkel III'.

- Legacy-Id: 11589
This commit is contained in:
Henrik Levkowetz 2016-07-10 13:58:30 +00:00
parent bc54874f57
commit 402a099e4e
2 changed files with 38 additions and 0 deletions

View file

@ -0,0 +1,18 @@
from __future__ import unicode_literals
from django.template.base import Library
from django.template.defaultfilters import stringfilter
from ietf.utils.text import xslugify as _xslugify
register = Library()
@register.filter(is_safe=True)
@stringfilter
def xslugify(value):
"""
Converts to ASCII. Converts spaces to hyphens. Removes characters that
aren't alphanumerics, underscores, slashes, or hyphens. Converts to
lowercase. Also strips leading and trailing whitespace.
"""
return _xslugify(value)

20
ietf/utils/text.py Normal file
View file

@ -0,0 +1,20 @@
from __future__ import unicode_literals
import re
import unicodedata
from django.utils.functional import allow_lazy
from django.utils import six
from django.utils.safestring import mark_safe
def xslugify(value):
"""
Converts to ASCII. Converts spaces to hyphens. Removes characters that
aren't alphanumerics, underscores, slash, or hyphens. Converts to
lowercase. Also strips leading and trailing whitespace.
(I.e., does the same as slugify, but also converts slashes to dashes.)
"""
value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
value = re.sub('[^\w\s/-]', '', value).strip().lower()
return mark_safe(re.sub('[-\s/]+', '-', value))
xslugify = allow_lazy(xslugify, six.text_type)