/ / UnboundLocalError, zmienna lokalna dostępna przed przypisaniem, ale nie? - python, django

UnboundLocalError, lokalna zmienna dostępna przed przypisaniem, ale nie? - python, django

Robię coś bardzo prostego w Django i otrzymuję ten naprawdę dziwny błąd:

UnboundLocalError at /me/profile/edit/
local variable "form" referenced before assignment

Oto mój kod:

if request.method == "POST":
form = MyForm(request.POST)
if form.is_valid():
print "Yes"
else:
form = MyForm(user=request.user)

Dlaczego ten kod generuje ten błąd? To całkiem proste, ale jeśli wyciągnę if form.is_valid() rzeczy, to działa. Co idzie nie tak?

Odpowiedzi:

2 dla odpowiedzi № 1

Jak napisano, kod wygląda na poprawny, więc spodziewam się, że coś zostało zagubione podczas publikowania pytania (być może drugie wyrażenie if nie było tak naprawdę wcięte).


3 dla odpowiedzi № 2

Najprostszym rozwiązaniem tego problemu jest usunięcie klauzuli else:

form = MyForm(request.POST or None)

if request.method == "POST":
if form.is_valid():
print "Yes"

Doskonała prezentacja Danny'ego Greenfelda dotycząca użycia formularza Django: http://www.slideshare.net/pydanny/advanced-django-forms-usage (slajd 33 dotyczy konkretnie).