0

我的一项功能有问题。当我提交没有任何价值的帖子表单时,我收到此错误。

 local variable 'picture' referenced before assignment

 Traceback:
 File "C:\Python26\Lib\site-packages\django\core\handlers\base.py" in get_response
   111.                         response = callback(request, *callback_args, **callback_kwargs)
 File "C:\o\17\mysite\pet\views.py" in BoardEditor
   260.             return render(request,'boardeditor.html',     {'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

我想我理解导致问题的原因,因为在我看来。我有一个图片变量,可以检索我所有的图片,如果它们没有来自 POST 的值。我得到这个错误。

我一直在寻找并尝试解决如何处理变量为 None 并且我没有成功的解决方案。

这是我从收集的所有资源中尝试的解决方案

如果 board 为 None ,则为其分配一个空值。

        if forms.is_valid():
            board = forms.cleaned_data['board']
            if board == None:
                picture = ""

当它们对我的图片变量没有价值时,我该如何应对错误?

4

3 回答 3

2
[..........]
    if forms.is_valid():
        board = forms.cleaned_data['board']

        picture = "" //<--add
        if board:
            boards = forms.cleaned_data['board']
            picture = Picture.objects.filter(board=boards)
        return render(request,'boardeditor.html',{ // align with if board:
            'picture':picture, 
            'board':BoardNameForm(request.user), 
            'boardpicture':BoardPictureForm(request.user),
         })
    if formss.is_valid():
        pooh = forms.cleaned_data['board']

        pict = "" //<--add
        if pooh:
            pooh = formss.cleaned_data['board']
            pict = Picture.objects.filter(board=pooh)
        return render(request,'boardeditor.html',{ // align with if pooh:
            'pict':pict, 
            'board':BoardNameForm(request.user), 
            'boardpicture':BoardPictureForm(request.user),
        })
[..........]
于 2013-03-26T09:16:16.093 回答
2

当您的表单未通过验证(is_valid() 返回 false)时,您将收到此错误,因此在这种情况下,您根本没有定义图片。您可以在开始时创建一个上下文字典,然后将所需的变量放在那里。像这样的东西

 context_data = {}
 if form.is_valid():
   context_data['picture']=Picture.objects.filter(board=boards)
 return render(request,'boardeditor.html',context_data)
于 2013-03-26T09:09:22.553 回答
2

以下是导致错误的行:

return render(request,'boardeditor.html',{'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

原因是 return 语句不在 if 条件下,因此它picture在所有情况下都尝试返回变量。所以根据你的代码:

if forms.is_valid():
    board = forms.cleaned_data['board']
    if board == None:
        picture = ""
        if board:
            boards = forms.cleaned_data['board']
            picture = Picture.objects.filter(board=boards)
return render(request,'boardeditor.html',{'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

如果if forms.is_valid()条件失败,您仍在尝试返回picture未定义的变量。您需要确保在访问它之前定义了变量。

有很多方法可以做到这一点。例如:

示例 1:

if forms.is_valid():
    board = forms.cleaned_data['board']
        if board:
            boards = forms.cleaned_data['board']
            picture = Picture.objects.filter(board=boards)
else:
    picture = '' # or None or False or Whatever
return render(request,'boardeditor.html',{'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

示例 2:

picture = '' # or None or False or Whatever
if forms.is_valid():
    board = forms.cleaned_data['board']
        if board:
            boards = forms.cleaned_data['board']
            picture = Picture.objects.filter(board=boards)
return render(request,'boardeditor.html',{'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

示例 3:

if forms.is_valid():
    board = forms.cleaned_data['board']
        if board:
            boards = forms.cleaned_data['board']
            picture = Picture.objects.filter(board=boards)
    return render(request,'boardeditor.html',{'picture':picture,'board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})
else:
    return render(request,'boardeditor.html',{'picture':'','board':BoardNameForm(request.user),'boardpicture':BoardPictureForm(request.user),})

或者按照 Aldarund 的建议将所有变量放入字典中,然后将字典传递给上下文。

于 2013-03-26T09:20:02.840 回答