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 俄语字符串 [重复]的主要内容,如果未能解决你的问题,请参考以下文章