You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:40:57