0

Django のdated_based 汎用ビューを使用しているときに、詳細ビューの URL に日付を入れたくありません。私は次のことを試しましたが、次のようになりますTypeError at /logbook/2013/january/testing/ object_detail() takes at least 6 arguments (7 given)

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),
)

ビュー.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)

上記のコードを変更して、URL に日を含めずに date_based 汎用ビューを引き続き使用することは可能ですか? そうでない場合は、URL パターンの簡単なカスタム ビューの例を教えてくださいurl(r'^logbook/(?P<year>\d{4})/(?P<month>[A-Za-z]+)/(?P<slug>[\w-]+)/$', views.entry_detail)

4

1 に答える 1

0

私を正しい方向に向けてくれたAlasdairとccbv.co.ukに感謝します。私はDetailViewを使用することになり、これは機能しました:

urls.py:

from django.views.generic import DetailView

urlpatterns += patterns('',
    url(r'^logbook/(?P<year>\d+)/(?P<month>[-\w]+)/(?P<slug>[\w-]+)/$',
        DetailView.as_view(model=Entry),
        name="entry_detail"),
)

views.py:

# nothing needed here for the detail view to work, though in the future 
# I would like to have the generic view code here instead to accomplish 
# the same thing as `DetailView.as_view(model=Entry), name="entry_detail"` 
# in urls.py, and would appreciate an example of this.
于 2013-01-08T13:40:19.673 に答える