15

私はこのチュートリアルの最後の部分にいます。

from django.conf.urls import patterns, include, url
from django.views.generic import DetailView, ListView
from polls.models import Poll

urlpatterns = patterns('',
    url(r'^$',
        ListView.as_view(
            queryset=Poll.objects.order_by('-pub_date')[:5],
            context_object_name='latest_poll_list',
            template_name='polls/index.html')),
    url(r'^(?P<pk>\d+)/$',
        DetailView.as_view(
            model=Poll,
            template_name='polls/detail.html')),
    url(r'^(?P<pk>\d+)/results/$',
        DetailView.as_view(
            model=Poll,
            template_name='polls/results.html'),
        name='poll_results'),
    url(r'^(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
)

ListViewは機能しますが、DetailViewでURLにアクセスすると、取得します。

AttributeError at /polls/2/
Generic detail view DetailView must be called with either an object pk or a slug.
Request Method: GET
Request URL:    http://127.0.0.1:8000/polls/2/
Django Version: 1.4.1
Exception Type: AttributeError
Exception Value:    
Generic detail view DetailView must be called with either an object pk or a slug.
Exception Location: /home/yasith/coding/django/django-tutorial/lib/python2.7/site-packages/django/views/generic/detail.py in get_object, line 46
Python Executable:  /home/yasith/coding/django/django-tutorial/bin/python2
Python Version: 2.7.3

何が間違っているのかわかりません。どんな助けでもいただければ幸いです。

編集:メインのurls.pyを追加します

from django.conf.urls import patterns, include, url

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
4

2 に答える 2

40

上に投稿したコードは、ディスクにあるコードではないと思います。

同じ問題が発生しましたが、コードとチュートリアルの両方を注意深く調べました。コードに含まれている正規表現は、チュートリアルとは異なります。

これは私のコードでした:

 url(r'^(?P<poll_id>\d+)/$',-$                                               
 url(r'^(?P<poll_id>\d+)/results/$',-$                                       

これは正しいコアです:

 url(r'^(?P<pk>\d+)/$',-$                                               
 url(r'^(?P<pk>\d+)/results/$',-$                                       

* poll_id *はチュートリアルの前のセクションにありましたが、一般的なビューにはpkが必要であることに注意してください。また、チュートリアルが正しく、正しいコードを投稿したことにも注意してください(チュートリアルから)。

于 2012-10-15T19:32:19.117 に答える
0

彼らが言及したチュートリアルを注意深く見て、question_idの代わりにprimarykeyを使用するようにurlpatternsを変更してください。

于 2014-05-26T18:01:55.530 に答える