Django:塞满越南语

时间:2009-10-22 04:37:18

标签: django django-urls slug

越南语网站,与英语几乎没有什么不同。但是,有一个问题就是slu ..当我键入诸如“ư”,“ơ”,“á”等字符时,...... Django未被识别。这里的解决方案是替换未登录的字符。 例如:

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

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

4 个答案:

答案 0 :(得分:7)

[编辑]

我将其取回,django django.template.defaultfilters.slugify()使用unicodedata.normalize.encode('ascii', 'ignore')执行您想要的操作。只需将你的绳子喂入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)

我写的ealier(下面)的解决方案对于翻译中需要额外字符的语言仍然有用,例如德语的ü-> 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 = 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)

答案 1 :(得分:1)

你应该写一个新的过滤器或标签来做到这一点。

答案 2 :(得分:1)

您可以尝试将其标准化为Python - >

http://pyright.blogspot.com/2009/11/unicode-normalization-python-3x-unicode.html

这可以帮助而不是从ớbờcờdờđờ重新键入越南字母表并忽略其他特殊拉丁字符的可能性,只需运行规范化函数,并测试一切是否正常,记得测试单词“đ “因为我遇到了归一化功能没有正常化Đ-D的问题。

祝你好运:P

答案 3 :(得分:0)

或者您可以直接使用此应用为您完成此操作。

https://github.com/un33k/django-uslug

它也保证了独特性。

from uslug import uSlug
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 = uSlug(self.title)
        super(MyModel, self).save(*args, **kwargs)