【问题标题】:how to do a pagination-django with variable 'per_page'?如何使用变量'per_page'进行分页django?
【发布时间】:2018-01-08 20:19:33
【问题描述】:

如何使用变量“per_page”进行分页。 比如我有100篇文章我希望第一页(1)包含3篇文章,第二页(2)包含5篇文章,会兴奋,我谁画了每页有多少篇文章。 看图。

【问题讨论】:

    标签: django django-rest-framework django-views django-pagination


    【解决方案1】:

    我也有同样的问题,我无法从谷歌搜索好的答案,但我有一个技巧解决方案。

    如果per_page 像 5 一样恒定,我的代码是:

    paginator = Paginator(articles, 5)
    
    for page_no in paginator.page_range:
      context_data = {
        'paginator': paginator,
        'page_no': page_no,
      }
    

    我的解决方案是,如果 per_page 是可变的并收集在 num_articles_page 列表中,则为每个 forloop 创建假 Paginator 实例:

    page_no = 0
    row_counter = 0
    
    for row_num in num_articles_page:
      # count page_no for forloop
      page_no = page_no + 1
    
      # articles list in this page
      this_page_list = article_list[row_counter:]
    
      # count row for forloop
      row_counter = row_counter + row_num
    
      # push some fake item before this_page_list
      this_page_list = [None]*(page_no-1)*row_num + this_page_list
    
      # create Paginator instance in every forloop
      paginator = Paginator(this_page_list, row_num)
    
      if paginator.num_pages < page_no:
        break
    
      context_data = {
        'paginator': paginator,
        'page_no': page_no,
        'this_page': paginator.page(page_no),
      }
    

    所以this_page 在每个page_no 中都是正确的,您可以使用this_page.has_next()this_page. has_other_pages() 之类的方法

    在模板中也可以使用:

    {% for this_article in paginator|page:page_no %}
    {% endfor %}
    
    {% if this_page. has_previous == False %}
    {% endif %}
    

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2018-09-11
      • 2018-12-25
      • 2010-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多