如何使用变量“per_page”进行分页-django&#39 ;?

时间:2018-01-08 20:19:33

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

如何使用变量“per_page”进行分页。 例如,我有100篇文章,我希望第一页(1)包含3篇文章,第二页(2)包含5篇文章,会激动,我在每页中绘制了多少篇文章。 看到图片。enter image description here

1 个答案:

答案 0 :(得分:1)

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

如果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 %}