总体思路:
从数据库取出数据,根据事先定义的每页显示的数量,进行分页计算,得到页数,构造html,返回给前端解析显示。
后端python操作代码
#操作数据库进行分页
page = common.try_int(page, 1)
perpage = 5 #每页显示的数据数量
start = (page - 1)*perpage
end = page*perpage
count = models.Host.objects.all().count() #从数据库拿到数据数量
result = models.Host.objects.all()[start:end]
tmp_pages = divmod(count, perpage)
if tmp_pages[1] == 0:
all_pages = tmp_pages[0]
else:
all_pages = tmp_pages[0] + 1
page_html = []
first_html = "<a href='/index/%d'>首页</a>" %(1,)
page_html.append(first_html)
if page == 1: #页面边界检测
pre_next_html = "<a href='/index/%d'>上一页</a>" %(1,)
else:
pre_next_html = "<a href='/index/%d'>上一页</a>" %(page-1,)
page_html.append(pre_next_html)
for i in range(all_pages):
if i+1 == page:
tmp_html = "<a style='color:red;' href='/index/%d'>%d</a>" %(i+1, i+1)
else:
tmp_html = "<a href='/index/%d'>%d</a>" %(i+1, i+1)
page_html.append(tmp_html)
if page == all_pages:
nnext_html = "<a href='/index/%d'>下一页</a>" %(all_pages,)
else:
nnext_html = "<a href='/index/%d'>下一页</a>" %(page+1,)
page_html.append(nnext_html)
last_html = "<a href='/index/%d'>尾页</a>" %(all_pages,)
page_html.append(last_html)
page = mark_safe(''.join(page_html))
ret = {'data':result, 'count':count, 'pages':all_pages, 'list':page}
return render_to_response("index.html", ret) #返回数据,用模板语言解析拿到数据
前端解析部分:
<table border="1">
{% for item in data %}
<tr>
<td>{{item.HostName}}</td>
<td>{{item.IP}}</td>
</tr>
{% endfor %}
</table>
<div>总条数:{{count}}</div>
<div>总页数: {{pages}}</div>
<div>
<a href="/index/1">首页</a>
</div>
{{list}} #f分页列表