#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
Комментариев нет:
Отправить комментарий