首页 > 解决方案 > 简单的 django DetailView 不起作用,如何将 2 个参数传递给 DetailView

问题描述

我想为我的播放列表模型创建详细视图。我按照文档中的步骤操作 ,但我不断收到此错误:

AttributeError at /root
Generic detail view PlaylistDetail must be called with either an object pk or a slug in the URLconf.

这是我的代码:

模型:

class Playlist(models.Model):
    title = models.CharField(max_length=40, null=True)
    description = models.CharField(max_length=500, null=True)
    author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    miniature = models.ImageField(upload_to='images/playlist', default="defaults/default.png", validators=[validate_miniature_file_extension])
    tracks = models.ManyToManyField(Track)

    def __str__(self):
        return self.title

网址:

path('<slug:author>', PlaylistDetail.as_view(), name='playlist'),

看法:

class PlaylistDetail(DetailView):
    model = Playlist
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['now'] = timezone.now()
        return context

我想这是因为同一用户创建了多个播放列表,并且它必须获得用户 && 标题。有什么建议么?

标签: django

解决方案


问题是在网址中,您使用<slug:author>

path('<slug:author>', PlaylistDetail.as_view(), name='playlist'),

默认情况下,它会查找slug.

尝试使用以下内容更新视图:

class PlaylistDetail(DetailView):
    model = Playlist
    slug_url_kwarg = 'author' # <----
    def get_context_data(self, **kwargs):
        # . . . 

推荐阅读