簡體   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