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 № 1Jak 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).