如何让 Django slug 和 id 一起工作?

Posted

技术标签:

【中文标题】如何让 Django slug 和 id 一起工作?【英文标题】:How can I make Django slug and id work together? 【发布时间】:2019-03-24 03:53:18 【问题描述】:

我希望我的 URL 像 *** 一样包含 id 和 slug,但 slug 无法正常工作。而不是这样:

www.example.com/games/155/far-cry-5

网址是这样的:

www.example.com/games/155/<bound%20method%20Game.slug%20of%20<Game:%20Far%20Cry%205>>

我的模型.py:

class Game(models.Model):
    name = models.CharField(max_length=140)

    def slug(self):
        return slugify(self.name)

    def get_absolute_url(self):
        return reverse('core:gamedetail', kwargs='pk': self.id, 'slug': self.slug)

我的views.py:

class GameDetail(DetailView):
    model = Game
    template_name = 'core/game_detail.html'
    context_object_name = 'game_detail'

我的 urls.py :

path('<int:pk>/<slug>', views.GameDetail.as_view(), name='gamedetail')

【问题讨论】:

【参考方案1】:

调用 slug() 方法获取值。

return reverse('core:gamedetail', kwargs='pk': self.id, 'slug': self.slug())

或者将其定义为类的属性

@property
def slug(self):
    ...

【讨论】:

以上是关于如何让 Django slug 和 id 一起工作?的主要内容,如果未能解决你的问题,请参考以下文章

如何让 Django 从 unicode 字符创建 slug?

如何让 Next JS 动态路由与 RelayJS 一起使用

如何让 Django 和 ReactJS 一起工作?

在 URL 中同时显示 slug 和 ID,但仅在 Django 中按 ID 路由

如何在 Django 中使用反向工作来制作 *** 样式的 URL,以允许 slug 更改?

Django:使用重复的 slug 管理诸如 id:slug 之类的 url