2017-01-09 107 views
0

對不起,如果這是一個愚蠢的問題,但我是新來的Django,並不能找出什麼是錯的。Django在視圖中的可變增量

我想顯示一個數據庫的一行接一個,按下按鈕後應該改變。目的是翻譯詞彙並檢查它是否正確。

這是我的看法:

counter = 3 
def learn(request): 
    obj = Vokabel.objects.filter(pk=counter) 
    if request.method == "POST": 
     form=addE(request.POST) 
     if form.is_valid(): 
      temp1 = request.POST.get('elearn') 
      for i in obj: 
       if temp1 == i.eVok: 
        counter = counter + 1 
        return HttpResponseRedirect('/learnnext/') 
       else:  
        return HttpResponseRedirect('/learn/') 
    else: 
     form = addE() 
     return render(request, 'learn.html', {'form' : form, 'obj' : obj}) 

而且我的形式:

class addV(ModelForm): 
class Meta: 
    model = Vokabel 
    fields= ['eVok', 'dVok'] 

class addE(forms.Form): 
    elearn = forms.CharField(label='Uebersetzung', max_length= 100,widget=forms.TextInput(attrs={'autocomplete':'off'})) 

然而,這將返回下面的錯誤對我說:

local variable 'counter' referenced before assignment 
+2

這與Django不太相關。 「計數器」在哪裏被首先定義,什麼值正在增加? –

+1

爲什麼你會增加計數器呢?你沒有在任何地方使用它。另外,想想你的網站有多個用戶會發生什麼。 –

+0

感謝您的建議。不過,我只是想反擊,每次我點擊一個按鈕都會增加。無論如何,多用戶管理遠遠超過了我的技能水平。然後,我想用這個可變計數器來檢索我的數據庫中的可編輯語言,並且一個接一個地顯示它。 @Moses Koledoye – Jonas

回答

0

你所得到的錯誤是存在的因爲你沒有指定你想使用全局變量計數器,所以從解析器的角度來看你是一個在爲它分配任何值之前,請嘗試使用局部變量計數器的值。查閱global關鍵字瞭解更多信息。但那不是重點。

Django不是一個連續的過程。將您的Django代碼視爲連續運行的程序似乎是常見的誤解。不是這樣。 Django應用程序生命週期介於收到請求和發送響應時刻之間。你不能真正依靠你的反轉變量。根據您的特定約束,有幾種方法可以解決這個問題。如果您希望每個用戶擁有自己的計數器,則可能需要使用會話並將計數器設置爲會話密鑰(這裏是doc link)。如果您希望計數器在所有用戶會話中都是全局的,您可以使用緩存API來存儲和更新其值(再次,相關doc link)。

+0

非常感謝你^ v ^ – Jonas