Django抑郁检测项目detect_emotion函数问卷score始终为0的问题
Django抑郁检测应用问卷Score始终返回0的排查与修复方案
核心问题定位
问题出在depression_questionnaire与detect_emotion两个视图间的score传递逻辑,或是detect_emotion内部的score初始化/取值错误,导致最终模板渲染时拿到的是初始值0。
分步排查与修复
1. 检查视图间的Score传递机制
- 确认
depression_questionnaire计算完成score后,是否将其存入session并通过重定向传递到detect_emotion:# depression_questionnaire 函数中,计算完score后添加 request.session['questionnaire_score'] = calculated_score # 重定向到detect_emotion视图,避免表单重复提交 return redirect('detect_emotion') - 在
detect_emotion中,优先从session读取已有score,而非直接初始化:def detect_emotion(request): # 从session读取问卷得分,默认值0(兼容session不存在的情况) score = request.session.get('questionnaire_score', 0) # 此处添加视频情绪检测的分数计算逻辑(如需叠加得分) # emotion_score = your_emotion_detection_logic() # score += emotion_score # 可选:使用后清除session中的值,避免重复读取 if 'questionnaire_score' in request.session: del request.session['questionnaire_score'] return render(request, 'result.html', {'score': score})
2. 排查detect_emotion中的Score初始化覆盖
- 检查
detect_emotion函数开头是否存在score = 0的硬编码初始化,这会直接覆盖外部传递的score值,删除该代码或替换为从session/参数读取的逻辑。
3. 验证表单数据处理逻辑
- 如果
detect_emotion中需要重新处理问卷表单数据,确保表单验证通过后才计算score:def detect_emotion(request): score = 0 if request.method == 'POST': form = DepressionQuestionnaireForm(request.POST) if form.is_valid(): # 正确计算问卷得分 score = sum(form.cleaned_data.values()) else: # 从session读取之前的得分 score = request.session.get('questionnaire_score', 0) return render(request, 'result.html', {'score': score})
4. 检查模板渲染的变量名匹配
- 打开
result.html,确认渲染的变量名与视图传递的上下文变量完全一致:<!-- 确保变量名与视图中传递的score完全匹配 --> <p>问卷检测得分:{{ score }}</p>
内容的提问来源于stack exchange,提问作者Jubair KP
相关产品推荐
相关产品推荐

