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

request.session列表元素移除失效问题排查求助

问题分析与修复方案

你的代码存在两个核心问题,导致只能显示前两个问题:

1. 未定义变量引发POST请求异常

在POST分支里有一行print(name),但name变量从未被定义。当用户第二次点击「下一个」(即第二次发送POST请求)时,会直接触发NameError,程序中断,无法加载后续问题。

2. GET请求重复重置问题列表

每次用户刷新页面或通过GET方式访问视图时,request.session['questions']都会被重新初始化为包含4个问题的列表,直接覆盖之前的进度。正确逻辑应该是仅当session中没有questions键时才初始化列表。


修复后的代码

def game(request): 
    if request.method == 'GET':
        # 仅在session无问题列表时初始化,避免重置进度
        if 'questions' not in request.session:
            request.session['questions'] = ['question1','question2','question3','question4'] 
        q = request.session['questions'].pop(0)
        # 手动标记session已修改,确保Django保存更新后的列表
        request.session.modified = True
        form = QForm({'question':q})
        return render(request, 'game.html', {'form':form})
    else:
        # 处理POST请求,先判断问题列表是否还有剩余
        if len(request.session.get('questions', [])) > 0:
            q = request.session['questions'].pop(0)
            request.session.modified = True
            form = QForm({'question':q})            
            return render(request, 'game.html', {'form':form})          
        else:
            return redirect('home')

额外说明

  • 添加request.session.modified = True是因为Django默认不会自动检测列表类型的修改,手动标记后能确保session的更新被正确保存。
  • 用request.session.get('questions', [])避免当session中无questions键时触发KeyError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:15:35