如何使用变量 'per_page' 进行分页 Django?
how to do a pagination-django with variable 'per_page'?
如何使用变量 'per_page' 进行分页。
比如我有100篇文章,我希望第一页(1)包含3篇文章,第二页(2)包含5篇文章,我会兴奋的,我谁抽到每页有多少篇文章。
看图
我也有同样的问题,我无法从 google 中搜索到好的答案,但我有一个技巧解决方案。
如果per_page
像5一样恒定,我的代码是:
paginator = Paginator(articles, 5)
for page_no in paginator.page_range:
context_data = {
'paginator': paginator,
'page_no': page_no,
}
我的解决方案是为每个 forloop 创建假的分页器实例,如果 per_page 是可变的并收集在 num_articles_page 列表中:
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 %}
如何使用变量 'per_page' 进行分页。
比如我有100篇文章,我希望第一页(1)包含3篇文章,第二页(2)包含5篇文章,我会兴奋的,我谁抽到每页有多少篇文章。
看图
我也有同样的问题,我无法从 google 中搜索到好的答案,但我有一个技巧解决方案。
如果per_page
像5一样恒定,我的代码是:
paginator = Paginator(articles, 5)
for page_no in paginator.page_range:
context_data = {
'paginator': paginator,
'page_no': page_no,
}
我的解决方案是为每个 forloop 创建假的分页器实例,如果 per_page 是可变的并收集在 num_articles_page 列表中:
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 %}