2

投稿タイトルからスラッグを自動的に作成する投稿アプリを構築しています。タイトルに外国語が含まれている場合、スラッグが生成されません。

ここでいくつかの回答をすでに確認しましたが、あまり役に立ちません。以下に何か不足していますか?

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
4

1 に答える 1

1

slugifyユニコードも許可する必要があることを伝える必要があります。ドキュメントを参照してください

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

また、注意してください: のデフォルトmax_lengthSlugField 50 文字です。そのため、長いタイトルを変換するとスラッグが長すぎSlugFieldて例外が発生する可能性があります。

于 2016-05-09T11:12:29.600 に答える