0

関数の1つに問題があります。値のない投稿フォームを送信すると、このエラーが発生します。

 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の場合の処理​​方法に関する解決策を探して試していましたが、成功していません。

これが私が集めたすべてのリソースから試した解決策です

ボードがNoneの場合は、空の値を割り当てます。

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

画像変数に対して値がない場合、どうすればエラーに対処できますか?

4

3 に答える 3

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
[..........]
    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

エラーの原因となる行は次のとおりです。

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 に答える