【问题标题】:how to use auto generated slug as post URL link in Django如何在 Django 中使用自动生成的 slug 作为发布 URL 链接
【发布时间】:2021-05-17 14:04:07
【问题描述】:

我有一个用于生成 09cd5677-8e02-4bcb-8895-5e3f79f20a4b 的帖子的 UUID 主键,此代码用于 URL post/09cd5677-8e02-4bcb-8895-5e3f79f20a4b 中的链接,但它看起来很糟糕,所以我添加了这个蛞蝓场

from django.utils.crypto import get_random_string

class Post(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    post_id = models.SlugField(default=get_random_string,null=False)

    def get_absolute_url(self):
        return reverse('postdetails', args=[str(self.post_id)])

    def __str__(self):
        return str(self.id)

现在我的帖子是这样的 - post/TtMgyttnnUzO 所以主要的问题是它是否可以对这篇文章/TtMgyttnnUzO 进行类似的匹配,就像生成类似的帖子 slug post/TtMgyttnnUzO 所以之后它会崩溃,我该如何保护网站来解决这个问题,如果有其他更好的解决方案谢谢

【问题讨论】:

    标签: python django-models django-views django-templates uuid


    【解决方案1】:
    from django.utils.text import slugify
    
    class Post(models.Model):
        id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
        post_title = models.CharField(max_length=100) #Title of the Post
        slug = models.SlugField(unique=True)
    
        def save(self, *args, **kwargs):
            self.slug = slugify(self.post_title)
            super(Post, self).save(*args, **kwargs)
    
    
    • 这里模型的 save 方法被覆盖。 slugify 函数创建 post_title 的唯一 slug,并将 slug 值与其他值一起保存。
    • SlugField 应该始终是唯一的。
    • post_title 更新时,上述解决方案也有效,将生成更新后的 post_title 的新 slug。

    使用 Slug 可以提高 url 和 SEO 的可读性。

    【讨论】:

    • 谢谢我现在测试,我的一些帖子不应该有标题,从所需的标题是免费的,这就是为什么我想保留帖子/TtMgyttnnUzO,我可以使用 slugify 来发布/TtMgyttnnUzO+slugify 吗? slugify 生成什么类型​​的代码?只有文字还是数字?谢谢
    猜你喜欢
    • 2021-10-11
    • 2015-06-26
    • 2017-07-13
    • 2021-10-03
    • 2018-02-12
    • 2021-04-28
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多