2009-07-30 47 views
10

我對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,))) 

我有一種感覺,這是一個語法錯誤,但我找不到它。在此先感謝您的幫助......

回答

5

嘗試使用:

return HttpResponseRedirect(reverse('poll_results', kwargs={'object_id': p.id})) 
+0

謝謝 - 工作。你可能會解釋它與教程中的版本有什麼不同,以及它之前爲什麼沒有工作? – mportiz08 2009-07-30 05:29:50

+0

不知道教程。但似乎通用視圖是使用關鍵字參數。反向解析器分別與args和kwargs匹配,所以當你傳遞參數時,它與使用kwargs的視圖不匹配。但是當你通過kwargs時,它是有效的。合理? – bstpierre 2009-07-30 18:26:26

+0

是的,非常感謝! – mportiz08 2009-07-30 20:52:23

1

你確定這就是你的錯誤真的是?根據錯誤消息,它聽起來像是在視圖中或模板中您想要反轉'polls/poll_results'(在模板中,您可能正在做類似於{% url polls/poll_results poll.pk %}的操作)

0

我已嘗試提供的解決方案作爲答案,沒有爲我工作。在我的情況下,我得到了同樣的錯誤(遵循相同的教程),問題是urls.py文件中的視圖名稱與views.py中的視圖名稱有些不同(因爲輸入錯誤)。

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"> 

我不知道爲什麼這解決了問題,但它爲我做了。如果有人有解釋,我會很樂意解釋。