0

날짜 기반의 일반 뷰에 대한 페이지 매김을 얻기 위해 장고 1.3으로 전환했습니다. 이것은 잘 작동하지만 특정 수의 항목을 원하지만 페이지 매김을 원하지 않는 페이지가 있습니다. 예를 들어 처음 5 개의 뉴스 항목을 반환합니다.num_latest를 클래스 기반 날짜 기반 일반 뷰로 대체 하시겠습니까?

우리는 최신 정보를 얻기 위해 정보를 입력 할 수있는 num_latest를 사용했습니다. 이것은 새로운 클래스 기반의 일반 뷰에는 존재하지 않는 것 같습니다.

paginate_by를 5로 설정하고 템플릿의 페이지 매김 링크를 사용하지 않아도 사람들은 수동으로 URL을 펀치 (panting)하여 이전 항목을 볼 수 있습니다. 게다가 나는 장고가 내가 사용하지 않을 페이지 매김을 설정하는 것을 원하지 않는다.

편집 : 이것은 내가 현재 사용하고있어 urlconf 라인입니다 :

url(r'^$', 
    ArchiveIndexView.as_view(
     model = Entry, 
     context_object_name = 'entry_list', 
     template_name = 'news/news.html', 
     date_field = 'published', 
    ), name = 'archive_index' 
), 

또한 편집 : 나는 위와 urlconf와 함께하지만 새와 코드의이 비트를 사용했습니다 get_dated_queryset 무시하려고 슬라이스 촬영 된 후 쿼리를 재정렬 할 수 없습니다라고보기 : 코멘트에 언급 한 바와 같이

class MainIndex(ArchiveIndexView): 
    def get_dated_queryset(self): 
     return Entry.objects.all()[:2] 

는 거의 같은 오류가 발생합니다.

답변

3

이 대신 오버라이드 (override) 해보십시오 :

 
def get_dated_items(self): 
    date_list, items, extra_context = super(MainIndex, self).get_dated_items() 
    return (date_list, items[:2], extra_context) 
참고 :이 구현은 후자가 슬라이스 한 후 설정 items 쿼리로 date_list 일관성을 떠날 수 있습니다. 나는 당신이 date_list도 재생성해야한다고 생각합니다. 자세한 내용은 SVN의 BaseArchiveIndexView.get_dated_items 구현을 참조하십시오. http://code.djangoproject.com/browser/django/trunk/django/views/generic/dates.py. 이와 비슷한 기능이 작동 할 수 있습니다.
 
def get_dated_items(self): 
    date_list, items, extra_context = super(MainIndex, self).get_dated_items() 
    items = items[:2] 
    date_list = self.get_date_list(items, 'year') 
    if not date_list: 
     items = items.none() 
    return (date_list, items, extra_context) 
하지만이 기능이 없어도 작동하는 경우 너무 지저분 해 보이기 때문에 만지지는 않을 것입니다.

+0

없습니다. queryset = Entry.objects.all() [: 5] 그러나 이렇게하면 다음과 같은 오류가 발생합니다. "조각이 채워지면 쿼리를 필터링 할 수 없습니다." 슬라이스가 끝나면 더 많은 것들이 완료됩니다. –

+0

BaseDayArchiveView mixin의 파생 상품을 사용하고 있습니까? – akonsu

+0

해당 URL이 아닙니다. 나는 현재 관련 뷰를 위해 사용하고있는 urlconf를 보여주기 위해 원래의 포스트를 편집했다. –

0

나는이 정확한 문제를 스스로 해결했다. 나는 이것을 사용하여 ListView (ArchiveIndexView 대신)를 사용하여 시간과 번거 로움을 덜어 주었다.

코드의 첫 번째 덩어리를 들어, 차이는 다음과 같습니다 슬프게도

from django.views.generic import ListView 


url(r'^$', 
    ListView.as_view(
     model = Entry, 
     context_object_name = 'entry_list', 
     template_name = 'news/news.html', 
     queryset=Entry.objects.all().order_by("-published")[:2], 
    ), name = 'archive_index' 
), 
관련 문제