2017-01-09 2 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

Спасибо за совет. Однако я просто хочу, чтобы счетчик увеличивался каждый раз, когда я нажимал кнопку. В любом случае, многократное управление пользователями намного выше моего уровня мастерства. Этот vaiable счетчик, который я затем хочу использовать, чтобы извлечь evey во время записи в мою базу данных и отобразить его один за другим. @Moses Koledoye – Jonas

ответ

0

Ошибка вы получаете там потому что вы не указали, что хотите использовать глобальный счетчик переменных, поэтому с точки зрения парсера вы повторите попытку использовать значение локального счетчика переменных, прежде чем назначать ему какое-либо значение. Посмотрите global ключевое слово для получения дополнительной информации. Но это не относится к делу.

Django не является непрерывным процессом. Похоже, это распространенное заблуждение думать о вашем коде Django как о постоянно действующей программе. Это не. Жизненный цикл приложения Django находится между момента получения запроса и момента отправки ответа. Вы не можете полагаться на свою постоянную переменную. Есть несколько способов справиться с этим в зависимости от ваших конкретных ограничений. Если вы хотите, чтобы у каждого пользователя был свой счетчик, вы можете использовать сеансы и устанавливать счетчик в качестве ключа сеанса (здесь есть doc link). Если вы хотите, чтобы счетчик был глобальным во всех пользовательских сеансах, вы могли бы использовать API кеширования для хранения и обновления его значения (опять-таки, соответствующего doc link).

+0

Большое спасибо^v ^ – Jonas

Смежные вопросы