在 django slug 字段中使用外语不起作用

Posted

技术标签:

【中文标题】在 django slug 字段中使用外语不起作用【英文标题】:using foreign language in django slug field is not working 【发布时间】:2016-03-22 09:42:42 【问题描述】:

这个问题可能有点大,我会尽量解释发生的一切。下面是我的标题模型,它用标题填充 slug 字段本身:

class Heading(models.Model):
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=5000)
    content =RichTextUploadingField ()
    image= models.ImageField(null=True,blank=True)
    date = models.DateField(default=datetime.now())
    time = models.TimeField(default=datetime.now())
    slug = models.SlugField(unique=True, null=True, blank=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super(Heading, self).save(*args, **kwargs)

我的头衔是一门外语(具体来说是尼泊尔语) 下面是我的管理面板的图像来填充标题类

你可以看到我的标题是外语的,但是我的 slug 字段是通过将那个标题转换为我不想要的英语来自动填充的,我希望我的 slug 字段用与我的标题字段相同的语言填充.我做了一些搜索,一个名为 unidecode 的模块可能是它的解决方案,我也尝试使用它,但由于它的文档不是很好,我无法理解它。所以如果有任何其他解决方案或如何制作正确使用 unidecode?任何形式的帮助或线索将不胜感激

【问题讨论】:

这是 slugify 函数的文档字符串:github.com/django/django/blob/… 这是实际代码:github.com/django/django/blob/…。您可以直接从 utils.text 导入 slugify 并设置 unicode=True。 de admin 中的 slug 在您键入时由 javascript 计算,但在执行 save 方法时被覆盖。 【参考方案1】:

问题是,slugification 发生在 JavaScript 中(至少在标准 Django admin 中),在它到达服务器之前(您可以在 admin contrib 包中查找 urlify.js)。

SlugField 上有一个名为 allow_unicode 的新选项,它可以满足您的需求,但它已在 Django 1.9 中引入。

如果你还不能升级到 1.9,理论上你可以在你的服务器上设置一些端点来接收一个字符串,在上面运行unidecode,然后返回它,然后编写一些自定义的 JavaScript 代码来覆盖管理中的默认 slugification,但这听起来需要做很多工作。

另一种选择是完全对管理员隐藏 slug 字段,并执行类似于您在问题中发布的代码 sn-p 的操作,但您可能应该在 ModelAdmin 类而不是模型中执行此操作本身(在将字符串传递给slugify 之前,您可能希望在那里使用unidecode)。

【讨论】:

以上是关于在 django slug 字段中使用外语不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Slug 字段不适用于 django 中的孟加拉语。如何在孟加拉语中使用蛞蝓

Django 使用 Slug 字段作为详细 URL

为啥我的保存方法在管理员中不起作用?

模型形式中的 django auto slug,例如 django admin 中的预填充字段

如何在 Django 中自定义 slug 字段?

django中的Slug字段错误