Slugify 和波斯语问题
Slugify and an issue with Persian language
我有如下模型:
class Rule(models.Model):
business = models.ForeignKey('profiles.Employee', limit_choices_to={'is_employee': True})
title = models.CharField(max_length=50, blank=False)
slug = models.SlugField(max_length=50, blank=True, null=True)
detail = models.TextField(max_length=200)
frequency = models.CharField(choices=freqs, max_length=10, blank=True, null=True)
update = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{}--{}".format(self.business, self.title)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if not self.title == "":
self.slug = slugify(self.title)
super(Rule, self).save()
我在 slug 中保存英文值记录没有任何问题,但是当我想保存波斯字符串时,我遇到了空白字段,尽管我在 settings.py
文件中写了 ALLOW_UNICODE_SLUGS = True
.
我该怎么办?
成功了!
首先你应该通过 Pip 安装 unidecode:
pip install unidecode
或使用以下 link:
https://pypi.python.org/pypi/Unidecode
之后:
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
from unidecode import unidecode
from django.template import defaultfilters
if not self.title == "":
self.slug = defaultfilters.slugify(unidecode(self.title))
super(rule, self).save()
它对波斯语(阿拉伯语)来说不是很好,但它很管用!
django 1.9 版中引入的新选项是 SlugField.allow_unicode
如果为真,则该字段除了接受 ASCII 字母外还接受 Unicode 字母。默认为假。 doc
例如:
在 models.py 文件中,定义 slug 列如下:
slug = models.SlugField(allow_unicode=True)
我有如下模型:
class Rule(models.Model):
business = models.ForeignKey('profiles.Employee', limit_choices_to={'is_employee': True})
title = models.CharField(max_length=50, blank=False)
slug = models.SlugField(max_length=50, blank=True, null=True)
detail = models.TextField(max_length=200)
frequency = models.CharField(choices=freqs, max_length=10, blank=True, null=True)
update = models.DateTimeField(auto_now=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return "{}--{}".format(self.business, self.title)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if not self.title == "":
self.slug = slugify(self.title)
super(Rule, self).save()
我在 slug 中保存英文值记录没有任何问题,但是当我想保存波斯字符串时,我遇到了空白字段,尽管我在 settings.py
文件中写了 ALLOW_UNICODE_SLUGS = True
.
我该怎么办?
成功了! 首先你应该通过 Pip 安装 unidecode:
pip install unidecode
或使用以下 link: https://pypi.python.org/pypi/Unidecode
之后:
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
from unidecode import unidecode
from django.template import defaultfilters
if not self.title == "":
self.slug = defaultfilters.slugify(unidecode(self.title))
super(rule, self).save()
它对波斯语(阿拉伯语)来说不是很好,但它很管用!
django 1.9 版中引入的新选项是 SlugField.allow_unicode
如果为真,则该字段除了接受 ASCII 字母外还接受 Unicode 字母。默认为假。 doc
例如:
在 models.py 文件中,定义 slug 列如下:
slug = models.SlugField(allow_unicode=True)