Django视图中的变量增量

时间:2017-01-09 17:19:10

标签: python 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

1 个答案:

答案 0 :(得分:0)

你得到的错误是因为你没有指定你想使用全局变量计数器,所以从解析器的角度来看,你在分配之前尝试使用局部变量计数器的值任何价值。查找global关键字以获取更多信息。但这是重点。

Django不是一个持续的过程。将Django代码视为一个持续运行的程序似乎是一种常见的误解。它不是。 Django应用程序生命周期介于收到请求的瞬间和发送响应时刻之间。你不能真正依赖你的反变量。根据您的特定约束,有几种方法可以解决这个问题。如果您希望每个用户都拥有自己的计数器,您可能希望使用会话并将计数器设置为会话密钥(此处为doc link)。如果您希望计数器在所有用户会话中都是全局的,则可以使用缓存API来存储和更新其值(同样,相关doc link)。