Django:塞满越南语

anh*_*ran 4 django django-urls slug

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

? -> u 
? -> o 
á -> a 
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*rdy 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")
Run Code Online (Sandbox Code Playgroud)

要自动执行此操作,请将其添加到.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)
Run Code Online (Sandbox Code Playgroud)

我写的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',
}
Run Code Online (Sandbox Code Playgroud)

然后你可以打电话:

print u"nh?ng-viên-k?o".translate(vietnamese_map)
Run Code Online (Sandbox Code Playgroud)

要得到:

u"nhung-vien-keo"
Run Code Online (Sandbox Code Playgroud)

有关更高级的用法(即动态字典),请参阅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)
Run Code Online (Sandbox Code Playgroud)