django slugify 俄语字符串 [重复]

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案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))

以上是关于django slugify 俄语字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Django:Slugify 发布数据

django slugify 出错

python python django slugify

使用python将俄语字符写入txt文件[重复]

博客类别 Slugify 在 Django 中不起作用

Django slugify url - 如何处理冲突?