10

私はPythonにかなり慣れていないので、ここでDjangoフレームワークのチュートリアルのパート4に従っています。世論調査アプリの一般的なビューを実装しようとしています。私のコードは (私が知る限り) 正しいようですが、投票しようとすると、次のような NoReverseMatch Exception が発生します。

引数 '(1L,)' とキーワード引数 '{}' を持つ 'polls/poll_results' の逆が見つかりません。

汎用ビューを試す前はコードは完全に機能していましたが、今は問題を特定できないようです。

poll ディレクトリにある 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

この人の要約された 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 に答える
1

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

于 2009-07-30T05:03:00.547 に答える
0

回答として提供されたソリューションを試しましたが、うまくいきませんでした。私の場合、同じエラーが発生し(同じチュートリアルに従って)、問題はurls.pyファイルのビューの名前がviews.pyの名前と少し異なることでした(入力エラーのため)。

于 2012-01-14T02:38:46.157 に答える