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

列表未正常填充?页面刷新时bug的views仍每次自增1

问题分析与解决方案

嘿,我一眼就瞅出问题所在啦!你当前的代码里,users列表是每次HTTP请求进来都会重新初始化的空列表——这意味着不管用户之前有没有访问过这个bug,只要刷新页面,这个列表就会被重置为空,所以user in users永远是False,每次都会执行else分支给views自增1。

修正思路

我们需要一个能跨请求保留用户访问记录的存储方式,Django的session就是最方便的选择(它会和用户的会话绑定,临时存储用户的浏览痕迹)。

修改后的代码

user = request.user
form = BugCommentForm()
comments = BugComment.objects.filter(bug__pk=bug.pk)
comments_total = len(comments)

# 从session中获取用户已浏览过的bug ID列表,默认是空列表
viewed_bugs = request.session.get('viewed_bugs', [])
current_bug_id = bug.pk

# 检查当前bug是否已经被用户浏览过
if current_bug_id not in viewed_bugs:
    bug.views += 1
    bug.save()
    # 将当前bug ID添加到浏览记录中,并更新session
    viewed_bugs.append(current_bug_id)
    request.session['viewed_bugs'] = viewed_bugs

额外说明

  • 这个方案对登录用户和匿名用户都生效,因为Django会给匿名用户分配一个会话ID。
  • 如果需要更持久的访问记录(比如用户换浏览器后仍能识别),可以考虑在数据库中新增一个BugView模型,记录用户ID和bug ID的对应关系,不过session已经能解决大部分场景的需求啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:29:34