Django从数据表查询数据无返回内容且不报错的原因是什么?
问题原因
- 核心错误是视图传递的上下文变量名与模板中引用的变量名不匹配
你在视图函数中定义的上下文参数是{'staff': staffs},也就是传给模板的列表变量名为staff,但模板中循环遍历的是不存在的staffs变量,Django模板默认对未定义的变量会直接渲染为空,所以没有结果也不会报错。 - 次要可优化问题:模型类中主键字段定义写法不规范,
id = models.AutoField缺少括号和primary_key=True参数,正确写法为id = models.AutoField(primary_key=True)(如果不手动定义主键Django也会自动生成该字段,该问题不直接导致无数据)
解决方法
- 修正视图中的上下文参数键名,和模板引用保持一致:
def user(request): staffs = staff.objects.all() # 把键名改为staffs,和模板遍历的变量名对应 params = {'staffs': staffs} return render(request, "salary/user.html", params)
也可以修改模板中的遍历代码为{% for staff in staff %},只要两边变量名一致即可。
2. 修正后如果仍无数据,可以在视图中添加打印语句校验数据是否存在:
def user(request): staffs = staff.objects.all() # 后台打印查询结果,确认数据库中是否有数据 print(staffs) params = {'staffs': staffs} return render(request, "salary/user.html", params)
如果后台打印结果为空<QuerySet []>,说明staff表中还没有录入任何数据,先创建测试数据即可。
内容的提问来源于stack exchange,提问作者Path Parakh
相关产品推荐
相关产品推荐

