【问题标题】:Pages show all rows when using get_context_Data for paginate_by in ListView在 ListView 中为 paginate_by 使用 get_context_Data 时,页面显示所有行
【发布时间】:2016-01-10 22:30:36
【问题描述】:

在 Django 中这个简单的通用视图中的分页工作正常,但每个页面显示所有行,而不是该页面的行。 如何选择给定页面所需的唯一记录?

class ArticleList(ListView):
    """Get all articles"""
    model = Article
    template_name = "blog/articles.html"
    paginate_by = 4

    def get_context_data(self, **kwargs):
        context = super(ArticleList, self).get_context_data(**kwargs)
        context['articles'] = Article.objects.select_related().all()

        return context

【问题讨论】:

    标签: python django django-generic-views


    【解决方案1】:

    因为您已覆盖 articles 中的 get_context_data 对象以返回所有内容。默认实现在那里进行分页,但您已将其替换为非分页查询集。

    改为定义get_queryset 并在此处添加select_related

    【讨论】:

      【解决方案2】:

      我最初是这样解决的:

      class ArticleList(ListView):
      """Get all articles"""
      model = Article
      template_name = "blog/articles.html"
      paginate_by = 1
      
      def get_context_data(self, **kwargs):
          context = super(ArticleList, self).get_context_data(**kwargs)
          p = Paginator(Article.objects.select_related().all(), self.paginate_by)
          context['articles'] = p.page(context['page_obj'].number)
      
          return context
      

      不过,经过大家的帮助,最好的办法是:

      class ArticleList(ListView):
      """Get all articles"""
      model = Article
      template_name = "blog/articles.html"
      paginate_by = 1
      context_object_name = "articles"
      
      def get_queryset(self):
          return Article.objects.all().order_by('-date')
      

      谢谢大家。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-28
      相关资源
      最近更新 更多