Django :越南语的蛞蝓

标签 django django-urls slug

越南语网站,实际上与英语没有什么不同。然而,有一个问题就是slug。当我输入“ư”、“ơ”、“á”等字符时,Django 无法识别。这里的解决方案是替换未登录的字符。 例如:

ư -> u 
ơ -> o 
á -> a 

“những-viên-kẹo”中的一个将变成“nhung-vien-keo”。 但是,我不知道该怎么做。谁来帮帮我。非常感谢!

最佳答案

[编辑]

我收回它,django的django.template.defaultfilters.slugify()使用unicodedata.normalize.encode('ascii)做你想要的','忽略')。只需将字符串输入 slugify 即可:

from django.template.defaultfilters import slugify
print slugify(u"những-viên-kẹo")

要自动执行此操作,请将其添加到模型中的 .save() 方法中:

from django.template.defaultfilters import slugify
MyModel(models.Model):
    title = models.CharField(max_length=255)
    slug  = models.SlugField(blank=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super(MyModel, self).save(*args, **kwargs)

我之前写的解决方案(如下)对于在翻译中需要额外字符的语言仍然有用,例如德语的 ü->ue、ß->ss 等。

[原帖]

Python 允许您使用翻译字典将字符映射到替换字符串。

适合您的情况的简单版本是:

vietnamese_map = {
    ord(u'ư'): 'u',
    ord(u'ơ'): 'o',
    ord(u'á'): 'a',
    ord(u'n'): 'n',
    ord(u'h'): 'h',
    ord(u'ữ'): 'u',
    ord(u'n'): 'n',
    ord(u'g'): 'g',
    ord(u'v'): 'v',
    ord(u'i'): 'i',
    ord(u'ê'): 'e',
    ord(u'n'): 'n',
    ord(u'k'): 'k',
    ord(u'ẹ'): 'e',
    ord(u'o'): 'o',
}

然后你可以调用:

print u"những-viên-kẹo".translate(vietnamese_map)

获取:

u"nhung-vien-keo"

有关更高级的使用(即动态字典),请参见 http://effbot.org/zone/unicode-convert.htm

请注意,上述内容只是为了向您展示 map 需要的样子,这并不是输入数据的特别方便的方式。做同样事情的更方便的方法是这样的:

_map = u"nn hh ữu nn gg vv ii êe nn kk ẹe oo"
# Take the above string and generate a translation dict
vietnamese_map = dict((ord(m[0]), m[1:]) for m in _map.split())
print u"những-viên-kẹo".translate(vietnamese_map)

关于 Django :越南语的蛞蝓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1605041/

相关文章:

python django media_root

python - Django 变量在标题部分不可见

python - 如何识别 Django 中 url 中的 anchor ?

django - 如何更改 Django 管理中的搜索字段标签?

python - 在 Django/python 中更改 "Authentication and Authorization"菜单的名称

Django,让url参数进入 View

django - 在django中如何可以通过URL传递数据?

seo - 更好的 SEO 从文章的 URL Slug 中删除 "stop"词?

php - Laravel 5 - Slug 实现

ruby-on-rails - Rails,在像/books/:slug, :to => 'books#show' , slug :/. *?/什么是slug :/. *?/doing?