越南语网站,与英语几乎没有什么不同。但是,有一个问题是蛞蝓。当我输入“ư”、“ơ”、“á”等字符时,无法识别 Django。此处的解决方案是替换未登录的字符。例如:
ư -> u
ơ -> o
á -> a
来自“những-viên-kẹo”的一个将变成“nhung-vien-keo”。但是,我不知道该怎么做。谁来帮帮我。非常感谢你!
越南语网站,与英语几乎没有什么不同。但是,有一个问题是蛞蝓。当我输入“ư”、“ơ”、“á”等字符时,无法识别 Django。此处的解决方案是替换未登录的字符。例如:
ư -> u
ơ -> o
á -> a
来自“những-viên-kẹo”的一个将变成“nhung-vien-keo”。但是,我不知道该怎么做。谁来帮帮我。非常感谢你!
[编辑]
我收回它,django'sdjango.template.defaultfilters.slugify()
做你想做的事,使用unicodedata.normalize
and .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)
我之前写的 slolution(如下)对于在翻译中需要额外字符的语言仍然有用,例如德语的 ü->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)
您应该编写一个新的过滤器或标签来做到这一点。
你可以尝试规范化它 Python ->
http://pyright.blogspot.com/2009/11/unicode-normalization-python-3x-unicode.html
这可能会有所帮助,而不是从 á ớ bờ cờ dờ đờ 重新输入越南字母并忽略其他特殊拉丁字符的可能性,只需运行规范化函数,并测试一切是否正常,记得测试单词“đ”,因为我遇到过归一化函数没有归一化 Đ - D 的问题。
祝你好运:P
或者你可以直接拉入这个应用程序来为你做这件事。
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)