1. 程式人生 > >django項目分頁

django項目分頁

span per bsp 切片 form first 版本 request 前端

測試版本

代碼:

# 測試分頁
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項目分頁