我是django的新手。
我在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)
我收到了这个错误:
UnboundLocalError at /polls/3/vote/
local variable 'poll_list' referenced before assignment
请帮帮我..我不明白为什么我一直收到这个错误。 感谢
答案 0 :(得分:1)
您收到此错误,因为在您的方法中,您只在if条件中创建变量poll_list
。因此,如果该条件为假,则没有poll_list
,因此当您尝试在poll_list.append(poll_id)
中使用它时,Python会为您提供该错误。
我认为你要做的是使用你在方法之外声明的全局变量,这不是你想做的事情的正确方法。
“错误”修复是在您的方法中添加global poll_list
。
正确的解决方法是重构您的方法:
# poll_list = [] - not needed
@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:
poll_list = request.session.get('voted_on', [])
if poll_id in poll_list:
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)
答案 1 :(得分:0)
分配名称会使编译器认为它是本地的。使用函数开头的global poll_list
来更改此值。
但是这会导致其他问题,所以你应该重新设计该功能。