• 【Django】开发日报_5_Day:手机号码管理系统(2)


    目录

    1、实现分页功能

     (1)插入测试数据

     (2)制作页码按钮 

     (3) 循环添加页码按钮

    ​(4) 进行改进

    (5)再度升级,计算数据条数和页数

    (6)再升级,限制页码按钮个数

    (7) 再升级,添加跳转功能

    (8)完整代码:


    1、实现分页功能

     (1)插入测试数据

    向列表函数中新建100条数据用于分页测试。

    1. def pretty_list(request):
    2. """靓号列表"""
    3. for i in range(100):
    4. models.PrettyNum.objects.create(mobile="12332112311",price=10,level=1,status=1)
    '
    运行

    注意:运行一次便立即注释或删掉,否则每次访问列表页面都会新增。 

    然后实现分页

    1. #分页功能
    2. #根据用户访问页码计算起始位置
    3. page = int(request.GET.get("page",1))
    4. page_size=10
    5. start = (page - 1) * page_size
    6. end = page * page_size
    7. qureyset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]

    完整代码:

    1. def pretty_list(request):
    2. """靓号列表"""
    3. # for i in range(100):
    4. # models.PrettyNum.objects.create(mobile="12332112311",price=10,level=1,status=1)
    5. #搜索字典
    6. data_dict={}
    7. value = request.GET.get("q","")
    8. if value:
    9. data_dict["mobile__contains"]=value
    10. #获取的列表按等级降序排列
    11. #select * from 表 order by level desc;
    12. #qureyset = models.PrettyNum.objects.all().order_by("-level")
    13. #分页功能
    14. #根据用户访问页码计算起始位置
    15. page = int(request.GET.get("page",1))
    16. page_size=10
    17. start = (page - 1) * page_size
    18. end = page * page_size
    19. qureyset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]
    20. return render(request, "pretty_list.html", {"qureyset": qureyset,"value":value})
    '
    运行

    下面就可以通过url传递page参数进行访问了

     

    (2)制作页码按钮 

    进入bootstrap官网,复制粘贴一段分页组件代码

     pretty_list.html

    1. {% extends 'template.html' %}
    2. {% block title_content %}
    3. 靓号列表
    4. {% endblock %}
    5. {% block content %}
    6. <div class="container">
    7. <div class="panel panel-default">
    8. <div class="panel-heading">
    9. <span class="glyphicon glyphicon-th-list" aria-hidden="true">span>
    10. 靓号列表
    11. div>
    12. <table class="table table-bordered">
    13. <thead>
    14. <th>IDth>
    15. <th>号码th>
    16. <th>价格th>
    17. <th>级别th>
    18. <th>状态th>
    19. <th>操作th>
    20. thead>
    21. <tbody>
    22. {% for qurey in qureyset %}
    23. <tr>
    24. <th>{{ qurey.id }}th>
    25. <td>{{ qurey.mobile }}td>
    26. <td>{{ qurey.price }}td>
    27. <td>{{ qurey.get_level_display }}td>
    28. <td>{{ qurey.get_status_display }}td>
    29. <td>
    30. <a class="btn btn-primary btn-xs" href="/pretty/{{ qurey.id }}/edit">编辑a>
    31. <a class="btn btn-danger btn-xs" href="/pretty/delete/?nid={{ qurey.id }}">删除a>
    32. td>
    33. tr>
    34. {% endfor %}
    35. tbody>
    36. table>
    37. div>
    38. <div>
    39. <ul class="pagination">
    40. <li class="disabled"><a href="#" aria-label="Previous"><span aria-hidden="true">«span>a>li>
    41. <li><a href="#">1a>li>
    42. <li><a href="#">2a>li>
    43. <li><a href="#">3a>li>
    44. <li><a href="#">4a>li>
    45. <li><a href="#">5a>li>
    46. <li><a href="#" aria-label="Next"><span aria-hidden="true">»span>a>li>
    47. ul>
    48. div>
    49. div>
    50. {% endblock %}

    手动添加链接实现分页

    1. <div>
    2. <ul class="pagination">
    3. <li><a href="/pretty/list/?page=1">1a>li>
    4. <li><a href="/pretty/list/?page=2">2a>li>
    5. <li><a href="?page=3">3a>li>
    6. <li><a href="?page=4">4a>li>
    7. <li><a href="?page=5">5a>li>
    8. ul>
    9. div>

    (3) 循环添加页码按钮

    views.py

    1. #生成页码代码
    2. """
    3. 1
  • 2
  • 3
  • 4
  • 5
  • ……
  • """
  • page_str_list = []
  • for i in range(1,20):
  • ele = '
  • {}
  • '.format(i,i)
  • page_str_list.append(ele)
  • page_string = "".join(page_str_list)
  • return render(request, "pretty_list.html", {"qureyset": qureyset,"value":value,"page_string":page_string})
  • pretty_list.html 

    1. <div>
    2. <ul class="pagination">
    3. {{ page_string }}
    4. ul>
    5. div>

    页面

    (4) 进行改进

    views.py导入代码

    1. #后端代码安全标记到前端
    2. from django.utils.safestring import mark_safe
     page_string = mark_safe("".join(page_str_list))

    访问页面

    (5)再度升级,计算数据条数和页数

    1. def pretty_list(request):
    2. """靓号列表"""
    3. # for i in range(100):
    4. # models.PrettyNum.objects.create(mobile="12332112311",price=10,level=1,status=1)
    5. #搜索字典
    6. data_dict={}
    7. value = request.GET.get("q","")
    8. if value:
    9. data_dict["mobile__contains"]=value
    10. #获取的列表按等级降序排列
    11. #select * from 表 order by level desc;
    12. #qureyset = models.PrettyNum.objects.all().order_by("-level")
    13. #分页功能
    14. #根据用户访问页码计算起始位置
    15. page = int(request.GET.get("page",1))
    16. page_size=10
    17. start = (page - 1) * page_size
    18. end = page * page_size
    19. qureyset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]
    20. #生成页码代码
    21. """
    22. 1
    23. 2
    24. 3
    25. 4
    26. 5
    27. ……
    28. """
    29. #获取数据库中的数据条数
    30. total_count = models.PrettyNum.objects.filter(**data_dict).order_by("-level").count()
    31. #总页数
    32. total_page_count,div = divmod(total_count,page_size)#divmod除法函数,返回值:商,余数
    33. if div:
    34. total_page_count += 1
    35. page_str_list = []
    36. for i in range(1,total_page_count+1):#range前取后不取,所以还要加一
    37. ele = '
    38. {}
    39. '.format(i,i)
    40. page_str_list.append(ele)
    41. page_string = mark_safe("".join(page_str_list))
    42. return render(request, "pretty_list.html", {"qureyset": qureyset,"value":value,"page_string":page_string})
    '
    运行

    (6)再升级,限制页码按钮个数

    1. def pretty_list(request):
    2. """靓号列表"""
    3. # for i in range(100):
    4. # models.PrettyNum.objects.create(mobile="12332112311",price=10,level=1,status=1)
    5. # 搜索字典
    6. data_dict = {}
    7. value = request.GET.get("q", "")
    8. if value:
    9. data_dict["mobile__contains"] = value
    10. # 获取的列表按等级降序排列
    11. # select * from 表 order by level desc;
    12. # qureyset = models.PrettyNum.objects.all().order_by("-level")
    13. # 分页功能
    14. # 根据用户访问页码计算起始位置
    15. page = int(request.GET.get("page", 1))
    16. page_size = 10
    17. start = (page - 1) * page_size
    18. end = page * page_size
    19. qureyset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]
    20. # 生成页码代码
    21. """
    22. 1
    23. 2
    24. 3
    25. 4
    26. 5
    27. ……
    28. """
    29. # 获取数据库中的数据条数
    30. total_count = models.PrettyNum.objects.filter(**data_dict).order_by("-level").count()
    31. # 总页数
    32. total_page_count, div = divmod(total_count, page_size) # divmod除法函数,返回值:商,余数
    33. if div:
    34. total_page_count += 1
    35. # 设置按钮显示范围
    36. plus = 5
    37. if total_page_count <= 2 * plus + 1:
    38. start_page = 1
    39. end_page = total_page_coun + 1
    40. else:
    41. # 当前页小于5
    42. if page <= plus:
    43. start_page = 1
    44. end_page = 2 * plus + 1
    45. else:
    46. if page >= total_page_count:
    47. start_page = total_page_count - 2*plus
    48. end_page = total_page_count + 1
    49. else:
    50. start_page = page - plus
    51. end_page = page + plus + 1
    52. if end_page>=total_page_count+1:
    53. end_page=total_page_count+1
    54. # 页码
    55. page_str_list = []
    56. for i in range(start_page, end_page): # range前取后不取,所以还要加一
    57. if i == page: # 当前页显示按钮样式
    58. ele = '
    59. {}
    60. '.format(i, i)
    61. else:
    62. ele = '
    63. {}
    64. '.format(i, i)
    65. page_str_list.append(ele)
    66. page_string = mark_safe("".join(page_str_list))
    67. return render(request, "pretty_list.html", {"qureyset": qureyset, "value": value, "page_string": page_string})
    '
    运行

    (7) 再升级,添加跳转功能

    1. {% extends 'template.html' %}
    2. {% block title_content %}
    3. 靓号列表
    4. {% endblock %}
    5. {% block content %}
    6. <div class="container">
    7. <div class="panel panel-default">
    8. <div class="panel-heading">
    9. <span class="glyphicon glyphicon-th-list" aria-hidden="true">span>
    10. 靓号列表
    11. div>
    12. <table class="table table-bordered">
    13. <thead>
    14. <th>IDth>
    15. <th>号码th>
    16. <th>价格th>
    17. <th>级别th>
    18. <th>状态th>
    19. <th>操作th>
    20. thead>
    21. <tbody>
    22. {% for qurey in qureyset %}
    23. <tr>
    24. <th>{{ qurey.id }}th>
    25. <td>{{ qurey.mobile }}td>
    26. <td>{{ qurey.price }}td>
    27. <td>{{ qurey.get_level_display }}td>
    28. <td>{{ qurey.get_status_display }}td>
    29. <td>
    30. <a class="btn btn-primary btn-xs" href="/pretty/{{ qurey.id }}/edit">编辑a>
    31. <a class="btn btn-danger btn-xs" href="/pretty/delete/?nid={{ qurey.id }}">删除a>
    32. td>
    33. tr>
    34. {% endfor %}
    35. tbody>
    36. table>
    37. div>
    38. <div>
    39. <ul class="pagination">
    40. {{ page_string }}
    41. ul>
    42. div>
    43. <form method="get">
    44. <div class="input-group">
    45. <input style="height: 32px" name="page" type="text" placeholder="请输入要跳转的页码">
    46. <span style="width: 100px">
    47. <button class="btn btn-default,left" type="submit">跳转button>
    48. span>
    49. div>
    50. form>
    51. div>
    52. {% endblock %}

    页面:

     

    (8)完整代码:

     pretty_list.html

    1. {% extends 'template.html' %}
    2. {% block title_content %}
    3. 靓号列表
    4. {% endblock %}
    5. {% block content %}
    6. <div class="container">
    7. <div class="panel panel-default">
    8. <div class="panel-heading">
    9. <span class="glyphicon glyphicon-th-list" aria-hidden="true">span>
    10. 靓号列表
    11. div>
    12. <table class="table table-bordered">
    13. <thead>
    14. <th>IDth>
    15. <th>号码th>
    16. <th>价格th>
    17. <th>级别th>
    18. <th>状态th>
    19. <th>操作th>
    20. thead>
    21. <tbody>
    22. {% for qurey in qureyset %}
    23. <tr>
    24. <th>{{ qurey.id }}th>
    25. <td>{{ qurey.mobile }}td>
    26. <td>{{ qurey.price }}td>
    27. <td>{{ qurey.get_level_display }}td>
    28. <td>{{ qurey.get_status_display }}td>
    29. <td>
    30. <a class="btn btn-primary btn-xs" href="/pretty/{{ qurey.id }}/edit">编辑a>
    31. <a class="btn btn-danger btn-xs" href="/pretty/delete/?nid={{ qurey.id }}">删除a>
    32. td>
    33. tr>
    34. {% endfor %}
    35. tbody>
    36. table>
    37. div>
    38. <div class="clearfix">
    39. <ul class="pagination" style="float: left">
    40. {{ page_string }}
    41. <li>
    42. <form style="float: left;margin-left: -1px" method="get">
    43. <input name="page"
    44. style="position: relative;float: left;display: inline-block;width: 80px;border-radius: 0;"
    45. type="text" class="form-control" placeholder="页码">
    46. <button style="border-radius: 0" class="btn btn-default" type="submit">跳转button>
    47. form>
    48. li>
    49. ul>
    50. div>
    51. div>
    52. {% endblock %}

    views.py

    1. def pretty_list(request):
    2. """靓号列表"""
    3. # for i in range(100):
    4. # models.PrettyNum.objects.create(mobile="12332112311",price=10,level=1,status=1)
    5. # 搜索字典
    6. data_dict = {}
    7. value = request.GET.get("q", "")
    8. if value:
    9. data_dict["mobile__contains"] = value
    10. # 获取的列表按等级降序排列
    11. # select * from 表 order by level desc;
    12. # qureyset = models.PrettyNum.objects.all().order_by("-level")
    13. # 分页功能
    14. # 根据用户访问页码计算起始位置
    15. page = int(request.GET.get("page", 1))
    16. page_size = 10
    17. start = (page - 1) * page_size
    18. end = page * page_size
    19. qureyset = models.PrettyNum.objects.filter(**data_dict).order_by("-level")[start:end]
    20. # 生成页码代码
    21. """
    22. 1
    23. 2
    24. 3
    25. 4
    26. 5
    27. ……
    28. """
    29. # 获取数据库中的数据条数
    30. total_count = models.PrettyNum.objects.filter(**data_dict).order_by("-level").count()
    31. # 总页数
    32. total_page_count, div = divmod(total_count, page_size) # divmod除法函数,返回值:商,余数
    33. if div:
    34. total_page_count += 1
    35. # 设置按钮显示范围
    36. plus = 5
    37. if total_page_count <= 2 * plus + 1:
    38. start_page = 1
    39. end_page = total_page_coun + 1
    40. else:
    41. # 当前页小于5
    42. if page <= plus:
    43. start_page = 1
    44. end_page = 2 * plus + 1
    45. else:
    46. if (page + plus) > total_page_count:
    47. start_page = total_page_count - 2 * plus
    48. end_page = total_page_count
    49. else:
    50. start_page = page - plus
    51. end_page = page + plus + 1
    52. # 页码列表
    53. page_str_list = []
    54. #首页
    55. page_str_list.append('
    56. 首页
    57. '.format(1))
    58. # 上一页
    59. if page > 1:
    60. prev = '
    61. 上一页
    62. '.format(page - 1)
    63. else:
    64. prev = '
    65. 上一页
    66. '.format(1)
    67. page_str_list.append(prev)
    68. # 页码
    69. for i in range(start_page, end_page): # range前取后不取,所以还要加一
    70. if i == page: # 当前页显示按钮样式
    71. ele = '
    72. {}
    73. '.format(i, i)
    74. else:
    75. ele = '
    76. {}
    77. '.format(i, i)
    78. page_str_list.append(ele)
    79. # 下一页
    80. if page < total_page_count:
    81. prev = '
    82. 下一页
    83. '.format(page + 1)
    84. else:
    85. prev = '
    86. 下一页
    87. '.format(total_page_count)
    88. page_str_list.append(prev)
    89. # 尾页
    90. page_str_list.append('
    91. 尾页
    92. '.format(total_page_count))
    93. page_string = mark_safe("".join(page_str_list))
    94. return render(request, "pretty_list.html", {"qureyset": qureyset, "value": value, "page_string": page_string})
    '
    运行

    页面

     

  • 相关阅读:
    WordArt Designer:基于用户驱动与大语言模型的艺术字生成
    springboot实现java线程池
    贡献者和律师的Web3指南:充分去中心化
    手机系统要不要更新?来看看这个答案
    Mac M1通过homebrew安装Redis报错(perl: unknown or unsupported macOS version: :dunno)
    mongodb基本操作命令
    一篇五分生信临床模型预测文章代码复现——Figure 4-6 临床模型构建(四)
    异类词典的实现
    【数据结构】栈和队列
    JavaSE学习之--抽象类和接口
  • 原文地址:https://blog.csdn.net/qq_51701007/article/details/126938180