django slugify俄罗斯弦

时间:2016-03-23 10:18:56

标签: python django cyrillic

我正在搜索多种语言的网站。它工作正常,但谈到俄罗斯,我遇到了问题。 Django不处理俄语字符。在模板中我有

<input type="text" name="q">

当我输入俄语文本时,例如ванна,在我request.POST['q']的视图功能中,我正确地说出了这个词。然后我需要敲击它,但它只是给我空字符串。我也尝试了这个answer,但是当我需要它是相同的俄语字符串时,我得到结果 vanna 。也许有一些方法可以将其转换回来?还是其他任何解决方案?

1 个答案:

答案 0 :(得分:3)

来自documentation

  

如果allow_unicode为False,则转换为ASCII(默认值)。将空格转换为连字符。删除不是字母数字,下划线或连字符的字符。转换为小写。还剥离前导和尾随空格。

这应该有效:

slugify("ванна", allow_unicode=True)

这仅适用于Django 1.9。

但是,基于Django 1.9 source code,您可以创建自己的utils函数:

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)