在保存几乎相同类型的其他表单时,我陷入了这个错误(在分配之前引用了UnboundLocalError局部变量'context'),但是工作正常,但是这个错误并没有显示错误
def clutchDetail(request):
clutchDetail = ClutchDetail.objects.all()
context = {'title': 'Clutch Detail',
'active': 'active',
'clutchDetail': clutchDetail,
}
return render(request, 'breedingRecApp/clutch_detail.html', context)
def离合器Detail_add(请求):
if request.method == "POST":
form = ClutchDetail_AddModelForm(request.POST or None)
if form.is_valid():
try:
form.save()
return redirect('breedingRecApp:clutch_detail')
except:
pass
else:
form = ClutchDetail_AddModelForm()
context = {'title': 'Species Detail Add',
'active': 'active',
'model': ClutchDetail,
'form': form,
}
return render(request, 'breedingRecApp/clutch_detail_add.html', context)
请帮助我解决此错误,我是Django的新手。我还有另一种形式的代码,它能100%正常工作,但是这给了我一个我遇到的错误:(
答案 0 :(得分:0)
出现此错误的原因是因为函数包含一个在使用 context
变量的代码路径,而没有先定义变量。例如,当您发出POST请求时,但是form.is_valid()
检查失败。在这种情况下,代码流将调用render(..)
函数,但是您没有定义context
变量。
最小的解决方法可能是将context
变量的定义 移到else
语句之外:
def clutchDetail_add(request):
if request.method == 'POST':
form = ClutchDetail_AddModelForm(request.POST)
if form.is_valid():
form.save()
return redirect('breedingRecApp:clutch_detail')
else:
form = ClutchDetail_AddModelForm()
context = {
'title': 'Species Detail Add',
'active': 'active',
'model': ClutchDetail,
'form': form,
}
return render(request, 'breedingRecApp/clutch_detail_add.html', context)
答案 1 :(得分:0)
在方法是POST且form.is_valid()
返回False
或form.save()
引发异常的情况下,由于您从未声明上下文变量,因此会引发此错误。
您可能也不需要在try: except:
通话中进行form.save()
,因为此时表单是有效的。
def clutchDetail(request):
clutchDetail = ClutchDetail.objects.all()
context = {'title': 'Clutch Detail',
'active': 'active',
'clutchDetail': clutchDetail,
}
return render(request, 'breedingRecApp/clutch_detail.html', context)
def clutchDetail_add(request):
if request.method == "POST":
form = ClutchDetail_AddModelForm(request.POST or None)
if form.is_valid():
form.save()
return redirect('breedingRecApp:clutch_detail')
else:
form = ClutchDetail_AddModelForm()
context = {'title': 'Species Detail Add',
'active': 'active',
'model': ClutchDetail,
'form': form,
}
return render(request, 'breedingRecApp/clutch_detail_add.html', context)
答案 2 :(得分:0)
谈论第二个代码块
唯一的地方
context
定义在第12行
context = {'title': 'Species Detail Add',
这仅在else:语句被触发时运行,所以在
时运行return render(request, 'breedingRecApp/clutch_detail_add.html', context)
如果未触发else语句,则不会定义context 干杯!