0
votes

DébutlocaleurRor «Contexte» de la variable locale référencée avant l'affectation

Je suis coincé à cette erreur (variable locale de Unboundlocalerror 'Contexte' référencé avant l'affectation) Bien que l'enregistrement de la forme de presque même type d'autre fonctionne bien, mais celui-ci n'est pas et montrant une erreur

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)


1 commentaires

Si la méthode est un post, mais le form.is_valid () échoue ou form.save () augmente une exception, vous ne définissez jamais le contexte < / code> variable.


3 Réponses :


0
votes

La raison pour laquelle vous obtenez cette erreur est parce que votre fonction contient un codePath où vous utiliser le contexte la variable , sans définir la variable d'abord. C'est par exemple le cas lorsque vous faites une demande postale, mais le form.is_valid () chèque échoue. Dans ce cas, le codeFlow appellera la fonction rendu (..) , mais vous n'avez pas défini la variable context .

La plus petite solution serait probablement de bouger La définition du contexte variable externe l'instruction el / code>: xxx


1 commentaires

@ S4Starb4boy: Bien sûr que ce n'est pas, car le formulaire n'est pas valide. Depuis le formulaire.is_valid () retourne false , cela signifie que vous avez entré une valeur incorrecte.



0
votes

Dans le cas où la méthode est une post et le form.is_valid () code> renvoie false code> ou formul_save () code> augmente Une exception Cette erreur est soulevée lorsque vous n'avez jamais déclaré la variable de contexte.

Vous n'avez probablement probablement pas besoin de faire essayer: sauf: code> sur votre form.save () code> appeler comme le formulaire est valide à ce stade. P >

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)


1 commentaires

C'est malheureusement parce que votre forme est invalide. Il y a une ligne qui fait si forme.is_valid (), seulement si cela revient vrai, cela procédera-t-il à la forme (); Que dit-il si vous imprimez (formidateurs)?



0
votes

parler du second bloc de code em>

Le seul endroit p> xxx pré>

est défini est en ligne 12 P>

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


1 commentaires

Merci! Je re-placons la variable de contexte maintenant, une erreur est partie, mais mes données ne se sauvegardent pas dans DB. J'ai le même code pour une autre forme qui fonctionne bien.