我对python相当陌生,并且遵循Django框架here的教程第4部分。我试图实现对投票程序通用视图 - 我的代码似乎是正确的(只要我可以告诉),但是当我试投,我得到一个NoReverseMatch异常,指出:Django的NoReverseMatch异常帮助
反向的找不到参数'(1L,)'和关键字参数'{}'的'polls/poll_results'。
在尝试使用通用视图之前,我的代码工作完美,但我现在似乎无法找到问题所在。
下面是投票目录我的urls.py代码:
from django.conf.urls.defaults import *
from djtest.polls.models import Poll
info_dict = {
'queryset': Poll.objects.all(),
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
(r'^(?P<poll_id>\d+)/vote/$', 'djtest.polls.views.vote'),
)
这里是views.py:
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.core.urlresolvers import reverse
from djtest.polls.models import Poll, Choice
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):
#redisplay form
return render_to_response('polls/poll_detail.html', {
'object': p,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
我有一种感觉,这是一个语法错误,但我找不到它。在此先感谢您的帮助......
谢谢 - 工作。你可能会解释它与教程中的版本有什么不同,以及它之前为什么没有工作? – mportiz08 2009-07-30 05:29:50
不知道教程。但似乎通用视图是使用关键字参数。反向解析器分别与args和kwargs匹配,所以当你传递参数时,它与使用kwargs的视图不匹配。但是当你通过kwargs时,它是有效的。合理? – bstpierre 2009-07-30 18:26:26
是的,非常感谢! – mportiz08 2009-07-30 20:52:23