2009-07-30 10 views
10

私はDjangoフレームワークhereのチュートリアルの第4部と一緒に、Pythonにかなり新しいです。私は、世論調査のアプリのための一般的なビューを実装しようとしている - 私のコードは正しいようです(私の知る限り)、私は投票しようとしたとき、私は述べてNoReverseMatch例外を取得:NoReverseMatch Djangoの例外ヘルプ

リバース用引数 '(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

+0

チュートリアルについてはわかりません。しかし、一般的なビューはキーワード引数を使用しているようです。逆リゾルバはargsとkwargsを別々に照合するので、argsを渡すときにkwargsを使用したビューと一致しません。しかし、あなたがkwargsを渡すとき、それは動作します。理にかなっている? – bstpierre

+0

ええ、ありがとう! – mportiz08

1

はあなたのエラーは本当にここでそれはありますか?このエラーメッセージに基づいて、ビューやテンプレートを逆にしようとしているように聞こえます'polls/poll_results'(テンプレートでは、{% url polls/poll_results poll.pk %}のようなことをしている可能性があります)

+0

私のテンプレートでこれをやっていますが、理由はわかりません – michela

0

解決策として回答を得ました。私のために働いていませんでした。私の場合は、同じチュートリアルに続いて同じエラーが発生していましたが、問題はurls.pyファイルのビューの名前がviews.pyのビット名前とは少し違っていた(入力エラーのため)。

私はこの人の要約Djangoのチュートリアル全体に走ったまで、私は、問題を修正任意の説明を見つけることができませんでした
1

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

http://tony.abou-assaleh.net/web-development/stripped-down-django-tutorial

それがあるべき詳細テンプレートの行は、基本的にです代わりに:

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

なぜこの問題が修正されたのかわかりませんが、それは私のためでした。私は誰かがいる場合は説明が大好きです。

+7

1.4.1を使用している場合は、 '' polls.views.voteの周り –