在python中赋值之前引用的局部变量'form'
Posted
技术标签:
【中文标题】在python中赋值之前引用的局部变量\'form\'【英文标题】:local variable 'form' referenced before assignment in python在python中赋值之前引用的局部变量'form' 【发布时间】:2020-04-10 16:21:51 【问题描述】:这段代码总是向我显示在赋值之前引用的错误局部变量“表单”
def home(request):
if request.method=='POST':
form = ListForm(request.POST or None)
if form.is_valid():
form.save()
all_items = list.object.all
messages.success(request ,('Item Has Been Added To List !'))
return render(request ,'home.html', 'all_items': all_items)
else :
all_items = list.object.all
return render(request, 'home.html', 'all_items': all_items)
【问题讨论】:
为什么不将代码粘贴到问题中? 在此处发布您的代码而不是链接 请不要将您的代码发布为图片。 如果request.method
是'GET'
,form
会是什么?
我想添加项目,所以它不会被发布
【参考方案1】:
变量 form 仅在条件 request.method == 'POST'
满足时才定义,否则函数范围内将没有 from 变量。为了解决您的问题,代码应如下所示:
if request.method=='POST':
form = ListForm(request.POST)
else:
form = ListForm(None)
【讨论】:
我不明白你的想法 只有在 request.method == 'POST' 时才定义 'from' 变量,否则函数范围内将没有 from 变量。为了解决您的问题,代码应如下所示: if request.method=='POST': form = ListForm(request.POST) else: form = ListForm(None)【参考方案2】:def home(request):
all_items = list.object.all()
if request.method=='POST':
form = ListForm(request.POST or None)
if form.is_valid():
form.save()
messages.success(request ,('Item Has Been Added To List !'))
return redirect('home.html')
else :
form = ListForm()
return render(request, 'home.html', 'all_items': all_items, 'form': form)
如果出现获取请求,表单将再次被抛出给用户
【讨论】:
我试过了,但这次出现了 AttributeError【参考方案3】:您可以这样做,因为该语句将在 and
的左侧进行断路
if 'form' in locals() and form.is_valid():
... do something
【讨论】:
你是if 'form' in locals()
还是if form in locals()
?
if 'form' in locals()
这很奇怪。无论如何,我只会在 def 之后将其定义为form = None
。然后做一个if form and form.is_valid():
,这应该会让你继续前进。【参考方案4】:
def home(request):
if request.method == 'POST':
form = ListForm(request.POST or None)
form = ListForm(request.POST)
if form.is_valid():
form.save()
all_items = list.objects.all
messages.success(request, ('Item has been added to do list!'))
return render(request, "home.html", 'all_itmes':all_items)
else:
print(form.errors)
return HttpResponse(form.errors)
else:
all_items = list.objects.all
return render(request, "home.html", 'all_itmes':all_items)
【讨论】:
我试过这个答案,它嵌套在 else 和 if 中工作以上是关于在python中赋值之前引用的局部变量'form'的主要内容,如果未能解决你的问题,请参考以下文章
Django:UnboundLocalError:在赋值之前引用的局部变量'company'
Pycharm - 禁用'局部变量'xxx'可能在分配之前被引用'