【问题标题】:django slugify russian string [duplicate]django slugify 俄语字符串 [重复]
【发布时间】:2016-07-10 13:54:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: python django cyrillic


    【解决方案1】:

    来自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)
    

    【讨论】:

    • 哦,我没有意识到他们已经更新了这个,correct doc linkbtw
    • 好吧,我用的是 django 1.6.11,我做不到。
    • 然后我得到错误:sub() got an unexpected keyword argument 'flags' 这一行:value = re.sub('[^\w\s-]', '', value, flags=re.U).strip().lower()
    • 你的python版本是多少?
    • 这很奇怪。在 python 2.7 (docs.python.org/2/library/re.html#re.sub) 中添加了 flags 参数。方法的签名是什么? (import re; help(re.sub))
    猜你喜欢
    • 2013-05-17
    • 2016-12-27
    • 1970-01-01
    • 2015-04-01
    • 2011-02-19
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多