请解释为什么会出现UnboundLocalError?

时间:2018-05-01 14:42:05

标签: python django

这是我的代码 - urls.py

path('post/<int:pk>/edit/',views.Edit_View, name = 'edit_view'),

views.py

def Edit_View(request,pk):
    try:
        my_form = Profile.objects.get(pk=pk)
    except:
        raise Http404('Page Doesnt Found')
    form = ProfileForm(request.POST or None, instance=my_form)
    if request.method == 'POST':

        if form.is_valid():
            form.save()
            return redirect('detail_view',pk=pk)
    else:
        return render (request, 'edit_view.html',{'form':form})

模板

<form method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="OK">

这样做很好,但在form = ProfileForm(request.POST or None, instance=my_form)之后写if request.method == 'POST':

def Edit_View(request,pk):
    try:
        my_form = Profile.objects.get(pk=pk)
    except:
        raise Http404('Page Doesnt Found')

    if request.method == 'POST':
        form = ProfileForm(request.POST or None, instance=my_form)
        if form.is_valid():
            form.save()
            return redirect('detail_view',pk=pk)
    else:
        return render (request, 'edit_view.html',{'form':form})

它给出了

UnboundLocalError at /post/2/edit/ local variable 'form' referenced before assignment错误,我想知道为什么会发生这样的事情!为什么早些时候这没有发生,后来发生了这样的错误,这是什么UnboundLocalError?

请指导我。 在此先感谢

2 个答案:

答案 0 :(得分:1)

form中的变量else尚未分配任何值:

else: return render (request, 'edit_view.html',{'form':form})

变量form仅在if中分配。 Python具有特定的范围规则,如果这些规则被破坏,Python会引发异常。 Python不会执行您的代码,因为如果执行else,您的变量将被取消分配。

此问题在此处详细解答:https://docs.python.org/3/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value

答案 1 :(得分:1)

在其他方面写下这个:

else:
    form = ProfileForm()
    return render (request, 'edit_view.html',{'form......