Django Slugify Русская Строка
Я делаю поиск по сайту на нескольких языках. Работает нормально, но когда дело доходит до русского, у меня проблемы. Джанго не обрабатывает русские символы. В шаблоне у меня есть
<input type="text" name="q">
Когда я набираю русский текст, например, ванна, на мой взгляд, функция в request.POST['q']
я правильно понял это слово Тогда мне нужно слагать это, но это просто дает мне пустую строку. Также я попробовал этот ответ, но потом я получаю результат vanna, когда мне нужно, чтобы это была та же русская строка. Может быть, есть какой-то способ конвертировать его обратно? Или любое другое решение?
1 ответ
Из документации:
Преобразует в ASCII, если allow_unicode имеет значение False (по умолчанию). Преобразует пробелы в дефисы. Удаляет символы, которые не являются буквенно-цифровыми, подчеркиваниями или дефисами. Преобразует в нижний регистр. Также убирает начальные и конечные пробелы.
Это должно работать:
slugify("ванна", allow_unicode=True)
Это доступно только для Django 1.9.
Однако на основе исходного кода Django 1.9 вы можете создать свою собственную функцию утилит:
from __future__ import unicode_literals
import re
import unicodedata
from django.utils import six
from django.utils.encoding import force_text
from django.utils.functional import allow_lazy
from django.utils.safestring import SafeText, mark_safe
def slugify_unicode(value):
value = force_text(value)
value = unicodedata.normalize('NFKC', value)
value = re.sub('[^\w\s-]', '', value, flags=re.U).strip().lower()
return mark_safe(re.sub('[-\s]+', '-', value, flags=re.U))
slugify_unicode = allow_lazy(slugify_unicode, six.text_type, SafeText)