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)
Другие вопросы по тегам