django项目分页

Posted xdlzs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django项目分页相关的知识,希望对你有一定的参考价值。

测试版本 

 代码:

# 测试分页
users=[{‘name‘:‘alex{}‘.format(i),‘pwd‘:‘aaa{}‘.format(i)}for i in range(1,302)]

def user_list(request):
# 获取当前页码值 并处理异常 输入字母也显示第一页 默认为第一页
try:
current_page=int(request.GET.get(‘page‘,1))
# 如果小于o 显示页面为1
if current_page<=0:
current_page=1
except Exception as e:
current_page=1
# 最多显示页码数
max_show=11
half_show=max_show//2

#每页显示数量
per_num=10
# 总数量
all_count=len(users)
# 总页数
total_num,more=divmod(all_count,per_num)
# 判断是否有剩余的
if more:
total_num +=1


#总页面数小于最大显示数: 显示总页码数
if total_num<max_show:
page_start= 1
page_end=max_show
#总页面数大于最大显示数: 显示总页码数
else:
# 当前页面数 小于一半
if current_page<=half_show:
page_start=1
page_end=max_show
# 当前页面数加一半 大于总页面数
elif current_page +half_show >=total_num:
page_end = total_num
page_start=total_num -max_show +1
else:
page_start=current_page - half_show
page_end=current_page +half_show
# 存放li标签的列表
html_list=[]
# 写首页 直接跳转
first_li=‘<li><a href="/crm/user_list/?page=1">首页</a></li>‘
html_list.append(first_li)
# 添加点击到第一页 不能点
if current_page ==1:
prev_li=‘<li class="disabled"><a><<</a></li>‘
# 可以点击上一页
else:
prev_li=‘<li><a href="/crm/user_list/?page={0}"><<</a></li>‘.format(current_page - 1)
html_list.append(prev_li)

# 循环 分页 在后端添加样式再传到前端
for num in range(page_start,page_end+1):
# 给当前页面加样式
if current_page==num:
li_html=‘<li class="active"><a href="/crm/user_list/?page={0}">{0}</a></li>‘.format(num)
# 否则不加
else:
li_html = ‘<li ><a href="/crm/user_list/?page={0}">{0}</a></li>‘.format(num)
html_list.append(li_html)

# 添加点击到最后一页 不能点
if current_page==total_num:
next_li=‘<li class="disabled"><a>>></a></li>‘
# 可以点击下一页
else:
next_li = ‘<li><a href="/crm/user_list/?page={0}">>></a></li>‘.format(current_page + 1)
html_list.append(next_li)
# 写尾页 直接跳转
last_li = ‘<li><a href="/crm/user_list/?page={}">尾页</a></li>‘.format(total_num)
html_list.append(last_li)
#在前端显示全部界面

html_str=mark_safe(‘‘.join(html_list))


# 获取切片起始值 current_page为页数,因为是切片取第一页要从零开始 要减一
start=(current_page-1)*per_num
# 获取切片终止值
end=current_page *per_num

return render(request,‘user_list.html‘,
{‘data‘:users[start:end],
# ‘total_num‘:range(page_start,page_end+1)
‘html_str‘: html_str
}
)
html代码:(里面有模板与继成)
{% extends ‘board/base.html‘ %}

{% block conten %}

<table class="table table-bordered">
<thead>
<tr>
<th>序号</th>
<th>用户名</th>
<th>密码</th>
</tr>
</thead>
<tbody>
{% for user in data %}
<tr>
<td>{{ forloop.counter }}</td>
<td>{{ user.name }}</td>
<td>{{ user.pwd }}</td>
</tr>
{% endfor %}

</tbody>
</table>

<nav aria-label="Page navigation">
<ul class="pagination">
{# {% for num in total_num %}#}
{# <li><a href="/crm/user_list/?page={{ num }}">{{ num }}</a></li>{% endfor %}#}

{# {% for num in total_num %}#}
{# <li><a href="/user_list/?page={{ num }}">{{ num }}</a></li>#}
{# {% endfor %}#}
{# {{ html_str|safe }}#}
{{ html_str }}
</ul>
</nav>

{% endblock %}

 

以上是关于django项目分页的主要内容,如果未能解决你的问题,请参考以下文章

Django-分页功能

Django—分页器与form组件

django对原始搜索结果进行分页

在 django 分页中显示页面项目计数

如何在Django项目中组织大量页面的分页?

如何在 CBV 的 django 分页中显示页面项目数?