django 1.9 slug 字段不适用于外语
django 1.9 slug field is not working for foreign language
我正在构建一个 post 应用程序,它会根据 post 标题自动创建 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
它也应该允许 unicode。 See docs.
def create_slug(instance, new_slug=None):
slug = slugify(instance.title, allow_unicode=True)
此外,请注意:SlugField
is 50 characters 的默认值 max_length
。因此,转换长标题可能会导致对您的 SlugField
来说太长的 slug 并引发异常。
我正在构建一个 post 应用程序,它会根据 post 标题自动创建 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
它也应该允许 unicode。 See docs.
def create_slug(instance, new_slug=None):
slug = slugify(instance.title, allow_unicode=True)
此外,请注意:SlugField
is 50 characters 的默认值 max_length
。因此,转换长标题可能会导致对您的 SlugField
来说太长的 slug 并引发异常。