2013-01-08 1 views
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 일반 뷰에서 day 키워드 인수를 생략 하시겠습니까?

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) 

위의 코드를 수정하고 날짜없이 URL에서 date_based 일반 뷰를 계속 사용할 수 있습니까? 그렇지 않다면 누군가 URL 패턴 url(r'^logbook/(?P<year>\d{4})/(?P<month>[A-Za-z]+)/(?P<slug>[\w-]+)/$', views.entry_detail)에 대한 간단한 사용자 정의보기의 예를 들려 줄 수 있습니까?

+0

당신이 일반적인 뷰를 사용자 정의하려는 경우, 당신은 수도 클래스 기반 뷰 (이 경우 ['DateDetailView']) (https://docs.djangoproject.com/en/dev/ref/class-based-views/generic-date-based/#datedetailview)로 이동하는 것이 더 쉽습니다. . – Alasdair

+0

DateDetailView [일일 키워드 인수가 여전히 필요합니다] (https://code.djangoproject.com/ticket/17508). 나는 내 자신의 견해를 써야 할 것 같아. – sgriffee

+1

나는'DateDetailView'가 상자를 움직이게 할 것을 제안하려고하지는 않았다. 단지 개별적인 방법을 오버라이드 할 수 있기 때문에 커스터마이징하기가 더 쉽다. 나는'get_object()'를 오버라이드 (override)하는 것으로 시작해, 어떻게되는지를 보았습니다. – Alasdair

답변

0

올바른 방향으로 나를 가리키고 ccbv.co.uk을 가리키는 데 Alasdair에게 감사드립니다. 나는 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.