一个越南语的网站,实际上和英语没有什么不同。但是,有一个问题就是slug。当我键入诸如“ư”,“ơ”、"á“、...无法识别Django。这里的解决方案是替换未登录的字符。例如:
ư -> u
ơ -> o
á -> a
“những-vièn-kẹo”中的一个将变成“nhung vien-keo”。然而,我不知道如何做到这一点。谁来帮帮我。非常感谢!
发布于 2010-01-15 23:22:27
编辑
我收回我的话,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)
我早些时候写的解决方案(下面)对于需要在翻译中添加额外字符的语言仍然有用,例如德语的ü->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)
发布于 2010-01-15 22:47:42
您应该编写一个新的筛选器或标记来执行此操作。
发布于 2010-02-06 23:05:22
您可以尝试将其规范化Python ->
http://pyright.blogspot.com/2009/11/unicode-normalization-python-3x-unicode.html
这可能会有所帮助,而不是重新输入来自aáớbờcờDờđờ的越南语字母表,并忽略其他特殊拉丁字符的可能性,只需运行规范化函数并测试是否一切正常,记住测试单词"đ“,因为我遇到了规范化函数无法规范化Đ-D的问题。
祝你好运:P
https://stackoverflow.com/questions/1605041
复制相似问题