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)