Я отримую вищезгадану помилку, коли дзвоню у користувацький спосіб перегляду,
#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 для відповіді № 1Ви не використовуєте свій клас ModelAdmin як місце призначення шаблону URL-адреси. Клас ModelAdmin зареєстрований у вашого наявного адміністратора, тому його get_urls
метод викликається, і відповідні URL-адреси додаються до типових адміністраторів.
Видаліть цей рядок з urls.py і він повинен працювати.