django - 简单的 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
我想这是因为同一用户创建了多个播放列表,并且它必须获得用户 && 标题。有什么建议么?
解决方案
问题是在网址中,您使用<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):
# . . .
推荐阅读
- loops - 当任何任务正在运行时,如何阻止异步程序终止?
- python-3.x - 如何管理“QMainWindow”小部件中的框架?
- javascript - React 中的错误边界没有按预期工作
- python - 你如何附加到一个字典中的值的列表?
- javascript - 如何在 Foreach 循环中循环遍历 div?
- python - 尊重网格的 Skimage 骨架化或 OpenCV 实现?
- php - 在 Centos 8 上安装较新版本的 php 时解压 rpm 包 php-common-7.3 时出错
- amazon-web-services - 为什么我需要 AWS Codestar 的开发人员账户?
- android - Android 获取 R8 错误:尝试使用缩小版本运行 UI 测试时已经有映射
- python - 如何在海量数据帧上提高 lambda 函数的性能