django 1.9 slug 字段不适用于外语

Posted

技术标签:

【中文标题】django 1.9 slug 字段不适用于外语【英文标题】:django 1.9 slug field is not working for foreign language 【发布时间】:2016-09-03 21:23:00 【问题描述】:

我正在构建一个帖子应用程序,它会自动根据帖子标题创建 slug。如果标题中有任何外语,则不会生成 slug。

我已经在这里完成了一些答案,但这并没有多大帮助。我在下面遗漏了什么吗?

class Post(models.Model):
    title = models.CharField(max_length=120)
    slug = models.SlugField(unique=True, allow_unicode=True)
    content = models.TextField()

def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug

    qs = Post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" %(slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)

    return slug

def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)

settings.py下面添加:

ALLOW_UNICODE_SLUGS = True

【问题讨论】:

请先通过格式化更新您的问题,然后添加您收到的确切错误消息。还请告知您使用的是什么 slugify 库(Django 内置或第三方) @e4c5 感谢您的建议!我会确保遵循这一点。 【参考方案1】:

您需要告诉slugify 它也应该允许 unicode。 See docs.

def create_slug(instance, new_slug=None):
    slug = slugify(instance.title, allow_unicode=True)

另外,请注意:SlugField 的默认 max_length is 50 characters。因此,转换长标题可能会导致对您的 SlugField 来说太长的 slug 并引发异常。

【讨论】:

感谢解决方案和有关 SlugField 默认 max_length 的信息!它工作正常。 很高兴知道它有效@Ankit,然后您应该将答案标记为正确,以便登陆此页面的人知道它在未来有效。此外,您将获得徽章和一些布朗尼积分:)

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

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

django相关字段解释(slug)

如何在 Django 1.9 中查询复杂的 JSONB 字段

Django 使用 Slug 字段作为详细 URL

django中的Slug字段错误

Django UserProfile slug 字段