2014-04-26 104 views
0

我得到上面的錯誤,當我調用自定義視圖的方法,__init __()得到了一個意想不到的關鍵字參數「PK」的Django

#views.py 

class MyEntryAdmin(admin.ModelAdmin): 
    review_template = 'admin/polls/myentry/review.html' 

    def get_urls(self): 
     urls = super(MyEntryAdmin, self).get_urls() 
     my_urls = patterns('', 
      (r'\d+/review/$', self.admin_site.admin_view(self.review)), 
     ) 
     return my_urls + urls 

    def review(self, request, id): 
     entry = MyEntry.objects.get(pk=id) 

     return render_to_response(self.review_template, { 
      'title': 'Review entry: %s' % entry.title, 
      'entry': entry, 
      'opts': self.model._meta, 
      'root_path': self.admin_site.root_path, 
     }, context_instance=RequestContext(request)) 

admin.site.register(MyEntry, MyEntryAdmin) 

#urls.py 
urlpatterns = patterns('polls.views' 
    url(r'^myentry/(?P<pk>\d+)/review/$', 'MyEntryAdmin', name='review') 
) 

當我調用的URL http://localhost:8000/admin/polls/myentry/1/review/我得到的錯誤

__init__() got an unexpected keyword argument 'pk' 

Traceback:  
Environment: 
Request Method: GET 
Request URL: `http://localhost:8000/admin/polls/myentry/1/review/` 

Django Version: 1.6.2 
Python Version: 2.7.5 
Installed Applications: 
    ('django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'polls') 
Installed Middleware: 
    ('django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware') 


Traceback: 
File "/home/sun1/projectFolder/myenv/local/lib/python2.7/site-packages/Django-1.6.2-py2.7.egg/django/core/handlers/base.py" in get_response 
    114.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

Exception Type: TypeError at /admin/polls/myentry/1/review/ 
Exception Value: __init__() got an unexpected keyword argument 'pk' 
+0

您是否有錯誤的相關跟蹤? – EyasSH

+0

我已添加跟蹤,謝謝。 – user3575232

+0

有趣。在urls.py(你的代碼的最後一部分)中使用'pk'會不會是問題? – EyasSH

回答

0

您不使用ModelAdmin類本身作爲URL模式的目標。 ModelAdmin類在您的現有管理員處註冊,所以其get_urls方法被調用並且相關的URL被添加到默認管理員的URL中。

從urls.py中刪除該行,它應該可以工作。

+0

我刪除了urls.py中的那一行,但是我收到了這個錯誤 - review( )只需要3個參數(給出2個參數) – user3575232

+0

你在get_urls的正則表達式中忽略了圍繞\ d +的圓括號。它應該和你在urls.py中的一樣(減去前綴)。 –

+0

對不起現在我得到了錯誤,review()得到了一個意想不到的關鍵字參數'pk', 我改成(r'^(?P \ d +)/ review/$',self.admin_site.admin_view(self。評論)),感謝您的幫助 – user3575232

相關問題