2011-08-20 92 views
2

本週你們幫助我如此之多,真是太棒了。希望你能幫助我解決這個問題。我試着在網站上關於這種類型的錯誤的其他帖子看,但他們沒有真正幫助我。基本上我是在一個頁面上提交一個表單,並且POST數據將與它生成的相同視圖一致。 POST數據發送後,我想重定向到其他頁面,但出現此錯誤。UnboundLocalError - 在分配之前引用的局部變量 - Django

def test(request): 
    if request.method == 'POST': 
     form = SubmitForm(request.POST) # A form bound to the POST data 
     if form.is_valid(): 
      lat = form.cleaned_data['lat'] 
      lng = form.cleaned_data['lng'] 
      title = form.cleaned_data['title'] 
      story = form.cleaned_data['story'] 

      ctxt = { 
        'lat':lat, 
        'lng':lng, 
        'title':title, 
        'story':story, 
        } 

      return render_to_response('home.html', ctxt, context_instance=RequestContext(request)) 

    else: 

     import datetime 
     now = datetime.datetime.now() 
     form = SubmitForm() 
     latest_marks = Marker.objects.all().order_by('-submitted')[0:10] 

     ctxt = { 
       'marks':latest_marks, 
       'now':now.date(), 
       'form': form, 
       } 
    return render_to_response('test.html', ctxt, context_instance=RequestContext(request)) 

我得到的錯誤是

local variable 'ctxt' referenced before assignment 

而且回溯是

Environment: 


Request Method: POST 
Request URL: http://localhost:8000/test/ 

Django Version: 1.3 
Python Version: 2.6.5 
Installed Applications: 
['django.contrib.staticfiles', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.admin', 
'userena', 
'guardian', 
'easy_thumbnails', 
'south', 
'database', 
'accounts', 
'socialregistration'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'userena.middleware.UserenaLocaleMiddleware', 
'socialregistration.middleware.FacebookMiddleware') 


Traceback: 
File "/home/wluw/dev/chicagomap/lib/python2.6/site-packages/Django-1.3-py2.6.egg/django/core/handlers/base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "/home/wluw/dev/chicagomap/chicagomap/../chicagomap/database/views.py" in test 
    58.  return render_to_response('test.html', ctxt, context_instance=RequestContext(request)) 

Exception Type: UnboundLocalError at /test/ 
Exception Value: local variable 'ctxt' referenced before assignment 

任何幫助將不勝感激。謝謝。

回答

7

這是因爲request.method == 'POST'爲真(第一個條件通過)而form.is_valid()爲False(第二個嵌套條件失敗),這意味着else運行後的最終返回但未定義ctxt。

也許你打算把最終返回作爲else子句的一部分進行縮進?

+0

好的。這就說得通了。我只需要弄清楚爲什麼表單無效。 – thebeagle

+2

在'form.is_valid()'之後放置一個'print form.errors'行來查明。 – LaundroMat

相關問題