繁体   English   中英

分配前引用的 UnboundLocalError 局部变量“上下文”

[英]UnboundLocalError local variable 'context' referenced before assignment

我在保存几乎相同类型的表单时遇到此错误(分配前引用了 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% 相同的表单代码,它工作正常,但这个代码给了我一个错误,我被困在它上面:(

您收到此错误的原因是您的 function 包含一个代码路径,您在其中使用context变量,而没有先定义变量。 例如,当您发出 POST 请求,但form.is_valid()检查失败时就是这种情况。 在这种情况下,代码流将调用render(..) function,但您没有定义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)

如果方法是 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)

谈第二个代码块

唯一的地方

context

定义在第 12 行

context = {'title': 'Species Detail Add',

这仅在 else: 语句被触发时运行,所以当

return render(request, 'breedingRecApp/clutch_detail_add.html', context)

如果没有触发 else 语句,则不会定义上下文 干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM