2016-05-22 55 views
0

我在我的網站上有一個標準博客,我使用Django Paginator添加了分頁。我還有一個側欄,可以遍歷所有帖子並顯示標題和鏈接。除了在list_view側邊欄只顯示當前頁面上顯示的帖子的標題和鏈接,但在detail_view中,所有標題和鏈接都可用,似乎大部分內容都可以使用。我知道爲什麼它這樣做,我只是不明白如何解決它。Django Paginator限制所有對象的迭代

下面是我的list_view的副本和一對夫婦截圖,以便於參考。謝謝。

post_list

def post_list(request, tag_slug=None): 
    posts = Post.published.all() 
    tag = None 

    if tag_slug: 
     tag = get_object_or_404(Tag, slug=tag_slug) 
     posts = posts.filter(tags__in=[tag]) 

    paginator = Paginator(posts, 3) # 3 posts in each page 
    page = request.GET.get('page') 
    try: 
     posts = paginator.page(page) 
    except PageNotAnInteger: 
     # If page is not an integer deliver the first page 
     posts = paginator.page(1) 
    except EmptyPage: 
     # If page is out of range deliver last page of results 
     posts = paginator.page(paginator.num_pages) 
    return render(request, 'press/post_list.html', {'page': page, 'posts': posts, 'tag': tag}) 

List View

Detail View

+1

如果要在頁面的側欄上顯示比分頁項允許的更多近期文章,則需要將不同的QuerySet傳遞給模板並迭代該模板,而不是使用分頁的'posts'對象,因爲我假設你目前是(我猜,因爲你沒有展示你的模板的相關部分) – Ben

回答

1

單獨發送的 「信息」 列表中不應用分頁程序的所有帖子。發送分頁列表變量,如「paginated_posts」。這樣你就不會被限制在右側的分頁文章。

我認爲這樣做的最佳方式是每頁發送與您希望爲「最近的帖子」顯示的最大數量相同的帖子數量,假設您未嘗試在最近顯示的所有帖子帖子。如果您最近發佈的帖子有一個令人滿意的媒介,以匹配您想要分頁的帖子數量,那麼您已經設置好了。

+0

謝謝本和BobbyC的迴應...這是顯而易見的解決方案有時滑過大腦:) - 我是否同意你的'更優化'的方式,但對於一個帖子少的小站點,迭代兩次是好的,但絕對不理想,因爲站點和帖子數量增加。謝謝。 –