最新Python的web开发全家桶(django+前端+数据库)
2023-06-23 18:36 作者:rearearaerae | 我要投稿
def pretty_num_list(request):
"""
搜索
"""
search_data = request.GET.get('search_data', '')
# 接收查询条件
search_dict = {} # 空的话默认搜索全部
if search_data: # 有搜索要求
# 向数据库搜索包含 输入的号码
search_dict = {
'mobile_number__contains': search_data, # 模糊查询
}
# obj_list = models.PrettyNum.objects.filter(mobile_number__contains=search_data)
"""
分页
"""
# 用户传入page,不传的话默认为1
page = int(request.GET.get('page', 1))
page_size = 10 # 每页展示10条数据
start = (page - 1) * page_size # 头数据
end = page * page_size # 尾数据
# 数据库数据的总条数 int
data_count = models.PrettyNum.objects.filter(**search_dict).order_by('-level').count()
# total_page_count:整数部分 ,m:余数部分
total_page_count, m = divmod(data_count, 10)
if m > 0: # 存在余数
total_page_count += 1
# 显示的页数
plus = 5
# 如果总页数不满11条,则就展示这么多即可
if total_page_count <= 2 * plus + 1:
start_page = 1
end_page = 11
else: # 数据库数据比较多>11页
# 当前页<=5
if page <= plus: #
start_page = 1
end_page = 2 * plus + 1
# 当前页>5
else:
# 去除一直往后翻页(即使最后几页没数据)
if page + plus > total_page_count:
start_page = total_page_count - plus * 2
end_page = total_page_count
else:
start_page = page - plus
end_page = page + plus
# 存字符串
page_str_list = []
# 首页
page_str_list.append('<li><a href="/preNumber/list/?page={}" aria-label="Previous"><span aria-hidden="true">首页</span></a></li>'.format(1))
if page > 1: # 可向上翻页
page_str_list.append(
'<li><a href="/preNumber/list/?page={}" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>'.format(
page - 1))
else: # 不可向上翻页
page_str_list.append(
'<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">上一页</span></a></li>')
# 循环生成11个html标签 并格式化
for i in range(start_page, end_page + 1): # 前取后不取
# 标记当前页
if i == page:
page_str_list.append(' <li class="active"><a href="/preNumber/list/?page={}">{}</a></li>'.format(i, i))
else:
page_str_list.append(' <li><a href="/preNumber/list/?page={}">{}</a></li>'.format(i, i))
# 向下翻页
if page < total_page_count: # 可向下翻页
page_str_list.append(
'<li><a href="/preNumber/list/?page={}" aria-label="Previous"><span aria-hidden="true">下一页</span></a></li>'.format(
page + 1))
else: # 不可向下翻页
page_str_list.append(
'<li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">下一页 </span></a></li>')
# 尾页
page_str_list.append(
'<li><a href="/preNumber/list/?page={}" aria-label="Previous"><span aria-hidden="true">尾页</span></a></li>'.format(
total_page_count))
# 元素都拼接成一个长字符串 ,mark_safe 标记这个字符串是安全的,页面才展示他的样式
page_str = mark_safe(''.join(page_str_list))
# select * from app01_PrettyNum order by level desc ; 按level倒序排列 ,大的在前面
# 一页展示10条数据 ,列表切片处理
obj_list = models.PrettyNum.objects.filter(**search_dict).order_by('-level')[start:end] # 传入字典要加 **
content = {
'obj_list': obj_list,
'search_content': search_data,
'page_list': page_str,
}
return render(request, 'prettyNum_list.html', content)

