【问题标题】:Django Paginator Limiting Iteration of all ObjectsDjango Paginator 限制所有对象的迭代
【发布时间】:2016-09-19 14:20:19
【问题描述】:

我的网站上有一个标准博客,我使用 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})

【问题讨论】:

  • 如果您想在主页的侧边栏上显示比分页项允许的更多的最新帖子,那么您需要将不同的 QuerySet 传递给模板并对其进行迭代,而不是使用分页的 @ 987654329@ 对象,我认为您目前是(我猜,因为您没有显示模板的相关部分。)

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


【解决方案1】:

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

我认为这样做的更优化的方法是每页发送相同的帖子数,作为您希望为“最近的帖子”显示的最大数量,假设您没有尝试在最近的帖子中显示所有帖子.如果您最近的帖子有一个快乐的媒介 # 与您想要分页的帖子数量相匹配 - 您就大功告成了。

【讨论】:

  • 感谢 Ben 和 BobbyC 的回复...这是显而易见的解决方案有时会从大脑中溜走 :) - 我确实同意您的“更优化”方式,但对于一个很少有的小型网站帖子,迭代两次是可以的,但随着站点和帖子数量的增加,绝对不理想。谢谢。
猜你喜欢
  • 2021-04-23
  • 1970-01-01
  • 2019-09-02
  • 2019-02-15
  • 2012-12-09
  • 2021-07-04
  • 2018-06-09
  • 2021-02-04
  • 2020-02-28
相关资源
最近更新 更多