2013-06-01 55 views
3

我想讓我的冒號變成破折號而不是空字符串。我想我可以把slugify(self.name.replace(":", "-"))這樣的東西放到我的save()方法中,但那根本不會幹(我認爲)。Django,如何覆蓋slugify函數

我也可以直接添加該.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包內進行?

回答

2

我會在項目中實現自定義功能slugify與所需的更改:

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

你可以在你的模型save()方法使用此功能。這使您的代碼免於「魔術」,因爲其他人會認爲slugify能夠以Django實現它的方式工作。