Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Какой подход используется для slugification на Хэшкод

#slug #django


Посмотрел код OSQA. Так как это приложение на Джанго, оно использует django.template.defaultfilters.slugify
для "слугификации" URL. Но эта функция плохо работает с не-ascii-символами (попросту
удаляет).
Но - на @Хэшкод'е все работает. Какой подход используете вы? Что-то универсальное
или только для русского языка? Если универсальное - может, поделитесь подходом?    


Ответы

Ответ 1



Делаем так: def u_slugify(txt): txt = txt.strip() txt = re.sub('\s*-\s*','-', txt, flags=re.UNICODE) txt = re.sub('[\s/]', '_', txt, flags=re.UNICODE) txt = re.sub('(\d):(\d)', r'\1-\2', txt, flags=re.UNICODE) txt = re.sub('"', "'", txt, flags=re.UNICODE) txt = re.sub(r'[?,:!@#~`+=$%^&\\*()\[\]{}<>]','',txt, flags=re.UNICODE) return txt

Ответ 2



Из рекомендаций по Flask'у (с транслитерацией): import re from unidecode import unidecode # ставится отдельно: pip install unidecode from django.template.defaultfilters import stringfilter from django.utils.safestring import mark_safe register = Library() PUNCT_RE = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+') @stringfilter def slugify(text, delim=u'-'): """Generates an ASCII-only slug.""" result = [] for word in PUNCT_RE.split(text.lower()): result.extend(unidecode(word).split()) return mark_safe(unicode(delim.join(result))) slugify.is_safe = True

Комментариев нет:

Отправить комментарий