10

我对 python 相当陌生,并在此处跟随 Django 框架教程的第 4 部分。我正在尝试为民意调查应用程序实现通用视图——我的代码似乎是正确的(据我所知),但是当我尝试投票时,我得到一个 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,)))

我有一种感觉,这是一个语法错误,但我找不到它。在此先感谢您的帮助...

4

4 回答 4

5

尝试使用:

return HttpResponseRedirect(reverse('poll_results', kwargs={'object_id': p.id}))
于 2009-07-30T03:27:37.940 回答
1

你确定这就是你的错误所在吗?根据错误消息,听起来像是在视图或模板中您试图反转'polls/poll_results'(在模板中,您可能正在执行类似的操作{% url polls/poll_results poll.pk %}

于 2009-07-30T05:03:00.547 回答
1

我找不到任何可以解决问题的解释,直到我遇到了这个人的 Django 节略教程:http ://tony.abou-assaleh.net/web-development/stripped-down-django-tutorial

它基本上是详细信息模板中的一行,应该是:

<form action="/polls/{{ poll.id }}/vote/" method="post">

代替:

<form action="{% url 'polls.views.vote' poll.id %}" method="post">

我不知道为什么这解决了这个问题,但它对我有用。如果有人有的话,我很想解释一下。

于 2012-08-14T05:29:31.367 回答
0

我已经尝试了作为答案提供的解决方案,但对我没有用。在我的情况下,我遇到了同样的错误(遵循相同的教程),问题是 urls.py 文件中的视图名称与 views.py 中的视图名称有点不同(因为输入错误)。

于 2012-01-14T02:38:46.157 回答