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

社交网络项目添加点赞数功能遇阻:无法显示单帖点赞数

解决单条帖子点赞数不显示的问题

步骤1:修复视图逻辑,传递必要数据到模板

修改views.py,补全点赞查询逻辑,同时通过数据库聚合直接计算每条帖子的点赞数,最后把用户点赞记录列表和带点赞数的帖子传递到模板:

from django.db.models import Count

def index(request):
    # 给每个帖子标注点赞数,利用反向关联统计
    posts = Post.objects.annotate(like_count=Count('postLiked')).order_by("-date")
    paginator = Paginator(posts, 10)
    number = request.GET.get('page')
    currentPosts = paginator.get_page(number)
    
    likeList = []
    if request.user.is_authenticated:
        # 获取当前用户点赞的所有帖子ID
        likes = Like.objects.filter(userLiking=request.user)
        likeList = [like.postLiked.id for like in likes]
    
    return render(request, "network/index.html", {
        "currentPosts": currentPosts,
        "likeList": likeList  # 传递用户点赞记录到模板
    })

说明:

  • 使用annotate+Count直接从数据库层面统计每条帖子的点赞数,比逐条查询效率更高
  • 修复了原代码中likes变量未定义的问题,仅在用户登录时查询点赞记录
  • 新增likeList上下文传递,确保模板中判断用户是否点赞的逻辑正常运行

步骤2:修改模板显示点赞数

修改index.html中的点赞数显示标签,直接调用帖子的like_count字段:

<p id="likeCount{{ post.id }}">Likes: {{ post.like_count }}</p>

此时模板中判断点赞状态的{% if post.id not in likeList %}逻辑也能正常工作,因为视图已经传递了likeList数据。

步骤3:验证刷新后的点赞数更新

当前JS逻辑中,点赞/取消点赞后会刷新页面,视图返回的帖子已包含最新点赞数,刷新后就能看到实时的点赞数量变化。如果需要无刷新更新,可后续优化JS逻辑,直接修改DOM中的点赞数和按钮状态,当前方案已解决核心显示问题。

额外验证点

  • 确认Like模型中postLiked的related_name为postLiked,确保Count('postLiked')能正确统计关联的点赞记录
  • 未登录用户的点赞按钮已被{% if user.is_authenticated %}包裹,不会触发错误逻辑

内容的提问来源于stack exchange,提问作者Sp1k3

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:57:35