Django迁移问答应用至新项目后分数显示功能异常求助
分数显示功能失效的排查分析
1. 模板变量未传入上下文
模板里用{{total}}展示分数,但GameplayView的get_context_data方法没有把total或分数相关变量加入context字典,模板拿不到数据,自然显示不了分数。
要修复的话,在get_context_data末尾加:
# 从session取初始化的分数 context['total'] = self.request.session.get('score', 0) # 如果用户已登录,从UserScores模型取持久化分数 if self.request.user.is_authenticated: context['total'] = self.request.user.user_id.score
2. 分数容器默认隐藏
模板中的<div class="total">设置了style="display:none",默认处于隐藏状态。就算变量有值,用户也看不到分数。需要在游戏结束时,用JavaScript把这个容器改为可见:
// 游戏结束时调用此函数显示分数 function showScore() { document.querySelector('.total').style.display = 'block'; }
3. 视图未与分数模型关联
UserScores模型用来持久化用户分数,但当前GameplayView只初始化了session里的score,既没把session分数同步到模型,也没从模型读取分数传给模板。如果需要持久化分数,得在视图里处理模型读写:
- 答对题目时更新分数:
# 示例:答对后更新session和模型分数 self.request.session['score'] += 10 if self.request.user.is_authenticated: self.request.user.user_id.score += 10 self.request.user.user_id.save()
4. 模型关联命名不合理
UserScores里的related_name='user_id'容易和默认的用户ID字段混淆,建议改成更清晰的名称,比如user_score:
class UserScores(AutoOneToOneModel(User, related_name='user_score')): score = models.PositiveIntegerField(default=0)
之后在视图里通过self.request.user.user_score.score访问用户分数即可。
内容的提问来源于stack exchange,提问作者ashraf sadik
相关产品推荐
相关产品推荐

