Django中Slug字段不支持孟加拉语如何解决?孟加拉语Slug正确使用方法
Django 孟加拉语Slug适配方案
核心原因
Django 内置的 slugify 工具默认会过滤所有非ASCII字符,导致孟加拉语等非英文内容生成Slug时会被清空或无法正常保留。
解决方案
1. 直接修改Slug生成逻辑
只需要在调用slugify时添加allow_unicode=True参数即可保留Unicode字符,适配孟加拉语内容,修改后的完整模型代码如下:
import datetime from django.utils.text import slugify class Post(models.Model): title = models.CharField(max_length=140) category = models.ForeignKey(Category, on_delete=models.DO_NOTHING) content = RichTextField(default="") image = models.ImageField(upload_to="media/post") url = models.SlugField(unique=True, max_length=250, null=True, blank=True) likes = models.IntegerField(default=0) created_date = models.DateTimeField(auto_now_add=True) update_at = models.DateTimeField(auto_now=True) def __str__(self): return f"{self.title}" def save(self, *args, **kwargs): if not self.url: slug_str = f"{self.title}-{datetime.datetime.now()}" # 新增allow_unicode参数允许Unicode字符,保留孟加拉语内容 self.url = slugify(slug_str, allow_unicode=True) return super().save(*args, **kwargs)
2. 注意事项
- 该参数在Django 1.9及以上版本均原生支持,无需额外安装第三方依赖
- Django 2.0及以上版本的
SlugField默认支持Unicode字符输入,无需修改字段定义 - 当前逻辑通过拼接时间戳已经可以大概率避免Slug重复,若要完全避免重复,可以添加校验逻辑:生成Slug后先查询数据库是否存在重复,存在则追加随机字符串后再存储。
内容的提问来源于stack exchange,提问作者Sourav Ganguly
相关产品推荐
相关产品推荐

