Django Paginator限制所有对象的迭代

时间:2016-05-22 19:12:14

标签: python django django-models django-templates django-views

我在我的网站上有一个标准博客,我为Django Paginator添加了分页。我还有一个侧边栏,遍历所有帖子并显示标题和链接。除list_view外,所有内容似乎都有效,但侧栏只显示当前页面上可见的帖子的标题和链接,但在detail_view中,所有标题和链接均可用。我知道为什么要这样做,我只是不明白如何解决它。

下面是我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 个答案:

答案 0 :(得分:1)

为所有帖子单独发送“帖子”列表,而不应用分页器。将分页的那些发送到单独的列表变量中,例如“paginated_posts”。这样您就不会受限于右侧的分页帖子。

我认为这样做的最佳方式是每页发送相同数量的帖子作为您要为“最近的帖子”显示的最大数量,假设您没有尝试在最近的帖子中显示所有帖子。如果您最近的帖子中有一个愉快的媒介#匹配您想要分页的帖子数量 - 您已经完成了设置。