Django Slugify土耳其字符转换问题:需生成无变音拉丁字符Slug
解决Django中土耳其语字符的Slug转换问题
核心思路是手动映射土耳其特殊字符到对应拉丁字符,再调用Django的slugify方法,就能得到符合需求的纯拉丁Slug。
具体实现步骤:
- 定义土耳其语特殊字符与普通拉丁字符的映射字典,覆盖所有需要转换的字符(包括大小写)
- 在模型的
save方法中,先替换字符串里的特殊字符,再生成Slug
修改后的完整模型代码:
class FirmaKategori(models.Model): kategori = models.CharField(max_length=250) description = models.CharField(max_length=5000) slug = models.SlugField(max_length=250, null=False, unique=True) # 无需设置allow_unicode=True def __str__(self): return self.kategori def get_absolute_url(self): return reverse('firma-kategori-ekle') def save(self, *args, **kwargs): # 土耳其语字符到拉丁字符的映射表 turkish_to_latin = { 'ı': 'i', 'İ': 'I', 'ş': 's', 'Ş': 'S', 'ğ': 'g', 'Ğ': 'G', 'ü': 'u', 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ç': 'c', 'Ç': 'C' } # 替换所有特殊字符 cleaned_kategori = self.kategori for turkish_char, latin_char in turkish_to_latin.items(): cleaned_kategori = cleaned_kategori.replace(turkish_char, latin_char) # 生成标准Slug self.slug = slugify(cleaned_kategori, allow_unicode=False) super().save(*args, **kwargs)
效果说明:
- 输入
Takım Tezgahları会生成takim-tezgahlari - 输入
Ulaşım Sektörü会生成ulasim-sektoru - 所有土耳其特殊字符都会被精准替换为对应普通拉丁字符,不会出现字符被省略的情况
内容的提问来源于stack exchange,提问作者Prusa
相关产品推荐
相关产品推荐

