如何解决Django视图代码中local variable 'fm' referenced before assignment报错
错误原因
你只在POST请求的分支内对fm变量做了赋值,当请求方式为GET(也就是普通页面访问的默认请求方式)时,代码不会进入if Request.method == 'POST'的判断分支,fm变量没有被定义就直接在render中被引用,因此触发该报错。
解决方案
1. 基础修复
给fm设置默认初始值即可,在判断请求方式的代码之前,先给fm赋一个和POST分支返回值类型一致的默认值(通常是空列表,模板渲染时也不需要额外做兼容处理)。
2. 可选优化:异常处理
原代码中直接用Robot.objects.get(pk=id),如果传入的id不存在对应数据,会直接抛出DoesNotExist异常,建议用Django内置的get_object_or_404简化异常处理,匹配不存在时直接返回404页面,更符合Web开发规范。
修改后的代码示例
from django.shortcuts import get_object_or_404 def Robot_History(Request,id): # 提前初始化fm默认值 fm = [] if Request.method == 'POST': pi = get_object_or_404(Robot, pk=id) fm = list(jenkinsHistory.objects.values('id','robotName','jenkinsBuildNumber','jenkinsBuildStatus','errorMsg','Param').filter(robotName=pi)) rob = Robot.objects.all() return render(Request, 'hello/robotHistory.html',{'jenkinsHistory': fm,'robot': rob})
内容的提问来源于stack exchange,提问作者Rika Das
相关产品推荐
相关产品推荐

