很抱歉,如果这是一个愚蠢的问题,但我是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
答案 0 :(得分:0)
你得到的错误是因为你没有指定你想使用全局变量计数器,所以从解析器的角度来看,你在分配之前尝试使用局部变量计数器的值任何价值。查找global
关键字以获取更多信息。但这是重点。
Django不是一个持续的过程。将Django代码视为一个持续运行的程序似乎是一种常见的误解。它不是。 Django应用程序生命周期介于收到请求的瞬间和发送响应时刻之间。你不能真正依赖你的反变量。根据您的特定约束,有几种方法可以解决这个问题。如果您希望每个用户都拥有自己的计数器,您可能希望使用会话并将计数器设置为会话密钥(此处为doc link)。如果您希望计数器在所有用户会话中都是全局的,则可以使用缓存API来存储和更新其值(同样,相关doc link)。