I’m new with django.
I have this code under my views.py
poll_list = []
@login_required
@never_cache
def vote(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
return detail(request, poll_id, error_message="You didn't select a choice.")
else:
if request.session.get('voted_on', False):
poll_list = []
request.session['voted_on'] = poll_list
if poll_id in request.session.get('voted_on', []):
return detail(request, poll_id, has_voted="You have already voted.")
selected_choice.votes += 1
selected_choice.save()
poll_list.append(poll_id)
request.session['voted_on'] = poll_list
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
return HttpResponse("You're voting on poll %s." % poll_id)
I got this error:
UnboundLocalError at /polls/3/vote/
local variable 'poll_list' referenced before assignment
Help me please.. I don’t understand why I keep getting this error.
Thanks
You are getting this error because in your method, you are only creating the variable
poll_listin the if conditional. So if that conditional is false, there is nopoll_list, so when you try to use it inpoll_list.append(poll_id), Python gives you that error.I think what you are trying to do is use the global variable that you have declared outside the method, which is not the right way to do what you want.
The “wrong” fix is to add
global poll_listin your method.The correct fix is to restructure your method: