如何将Django函数视图代码转为类视图?需添加fav判断到上下文
Django类视图添加收藏状态判断并传入上下文
直接给你修改后的完整类视图代码:
class PostDetailView(DetailView): model = Post def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 获取当前的Post对象,DetailView已自动通过pk参数获取,存在self.object中 post = self.object # 初始化收藏状态为未收藏 fav = False # 判断当前登录用户是否已收藏该帖子 if self.request.user.is_authenticated: if post.favourites.filter(id=self.request.user.id).exists(): fav = True # 将收藏状态传入上下文字典 context['fav'] = fav # 保留你原有的productobj变量,直接复用已获取的post对象,避免重复查询数据库 context['productobj'] = post return context
关键说明:
- 类视图中通过
self.request获取请求对象,对应函数视图里的request参数 DetailView会自动根据URL中的pk参数匹配并获取目标Post对象,存储在self.object里,无需再调用Post.objects.get()重复查询- 初始化
fav时要赋值布尔值False,原代码里的fav = bool是错误用法(bool是Python的布尔类型,不是具体的布尔值) - 添加
self.request.user.is_authenticated判断,避免匿名用户触发无效查询(匿名用户无有效id) - 将
fav存入context字典后,模板中可直接用{{ fav }}调用该状态值
内容的提问来源于stack exchange,提问作者pyguy34
相关产品推荐
相关产品推荐

