Django,如何覆盖slugify功能

时间:2013-06-01 21:59:43

标签: python django

我希望我的冒号被塞进破折号而不是空字符串。我想我可以将slugify(self.name.replace(":", "-"))这样的东西放到我的save()方法中,但这根本就不会干(我认为)。

此外,我可以将.replace()操作直接添加到django.utils.text.slugify

def slugify(value):
    value = unicodedata.normalize('NFKD', value).encode('ascii', 'ignore').decode('ascii')
    value = value.replace(":", "-")
    value = re.sub('[^\w\s-]', '', value).strip().lower()
    return mark_safe(re.sub('[-\s]+', '-', value))

这似乎不是一个好主意。我如何使用正则表达式?

  1. 我如何使用正则表达式?
  2. 如何将此覆盖与项目绑定,而不是在django包中进行?

1 个答案:

答案 0 :(得分:2)

我会在项目中使用所需的更改实现自定义slugify函数:

def myslugify(value):
    return slugify(value.replace(":", "-"))

您可以在模型的save()方法中使用此功能。这使得您的代码免于“魔术”,因为其他人希望slugify以Django实现它的方式工作。