0
我不想在使用Django的dated_based generic views時在詳細信息視圖的URL中有一天。我嘗試以下,但得到了TypeError at /logbook/2013/january/testing/ object_detail() takes at least 6 arguments (7 given)
:從Django的date_based通用視圖中省略日關鍵字參數?
models.py
class Entry(models.Model):
pub_date = models.DateTimeField()
def get_absolute_url(self):
return "/logbook/%s/%s/" % (self.pub_date.strftime("%Y/%B").lower(), self.slug)
urls.py:
from __future__ import absolute_import
from django.conf.urls import patterns, include, url
from .models import Entry
from . import views
urlpatterns += patterns('',
url(r'^logbook/(?P<year>\d{4})/(?P<month>[A-Za-z]+)/(?P<slug>[\w-]+)/$',
views.entry_detail),
)
views.py:
import functools
from django.views.generic import date_based
from .models import Entry
def prepare_arguments(view):
@functools.wraps(view)
def wrapped(request, *args, **kwargs):
kwargs['allow_future'] = request.user.is_staff
kwargs['queryset'] = Entry.objects.all() if request.user.is_staff
else Entry.objects.published()
kwargs['date_field'] = 'pub_date'
return view(request, *args, **kwargs)
return wrapped
@prepare_arguments
def entry_detail(request, *args, **kwargs):
return date_based.object_detail(request, *args, **kwargs)
是否可以修改上面的代碼並繼續使用date_based的通用視圖,而無需在URL中使用一天?如果沒有,請問有人可以舉一個簡單的自定義視圖的例子來說明URL模式url(r'^logbook/(?P<year>\d{4})/(?P<month>[A-Za-z]+)/(?P<slug>[\w-]+)/$', views.entry_detail)
?
如果你想定製通用視圖,你可能發現它更容易移動到基於類的視圖,在這種情況下['DateDetailView'](https://docs.djangoproject.com/en/dev/ref/class-based-views/generic-date-based/#datedetailview) 。 – Alasdair
DateDetailView [仍然需要一天關鍵字參數](https://code.djangoproject.com/ticket/17508)。我想我必須寫出自己的觀點。 – sgriffee
我並沒有試圖建議'DateDetailView'能夠解決這個問題,只是因爲你可以重寫個別方法,所以定製會更容易。我會從重寫'get_object()'開始,看看會發生什麼。 – Alasdair