前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >day75-<项目>-obj.get_XX_display(),分页的实现

day75-<项目>-obj.get_XX_display(),分页的实现

原创
作者头像
少年包青菜
修改2019-10-24 17:20:37
6350
修改2019-10-24 17:20:37
举报
文章被收录于专栏:Python 学习

1.设置浏览器的主题图片

2.设置圆形的图片(图片原来是矩形)

3.注意事项,关于导入 bootstrap

4.注册models里面的表达admin后台

5.定制admin后台的 verbose_name 和 verbose_name_plural

6.obj.get_XX_display()的使用

模板中使用,没有括号

具体体现
具体体现

后台使用,有括号

7.再次注意settings的默认日期显示格式

8.mark_safe方法的使用

9.关于如何设置实现一个分页功能

代码语言:javascript
复制
def practice_page(request):
    users = [{'username': 'leon{}'.format(i),
              'password': 'pwd{}'.format(i)} for i in range(0, 301)]

    try:
        request_page_num = int(request.GET.get('page', 1))  # 获取请求页
        if request_page_num <= 0:
            request_page_num = 1
    except Exception as e:
        print('{}:分页请求参数非法!'.format(str(e)))
        request_page_num = 1
    request_page_num = int(request_page_num)  # 转化为 int 类型
    all_data_length = len(users)  # 总数据量
    each_page_show_number = 10  # 每页显示 10 条数据吧
    all_count_pages_number, more_page = divmod(all_data_length, each_page_show_number)
    if more_page:  # 如果有余数的话
        all_count_pages_number += 1
    max_show_page = 11  # 定义最大显示的数量数 11 页

    half_page = max_show_page // 2  # 获取中间页码
    if all_count_pages_number <= max_show_page:  # 如果我的总的页数加起来还不满 11 格
        start_page = 1  # 起始页写死为 1
        end_page = all_count_pages_number  # 最后一页同样写死
    else:
        if request_page_num - half_page <= 0:  # start开始出现 0 了
            start_page = 1  # 卡死第一页是 1
            end_page = max_show_page  # 最后一页是 最大允许显示的页数
        elif request_page_num + half_page >= all_count_pages_number:  # 如果已经最大了
            start_page = all_count_pages_number - max_show_page + 1
            end_page = all_count_pages_number
        else:
            start_page = request_page_num - half_page  # 定义开始的页码
            end_page = request_page_num + half_page  # 定义结束的页码

    html_list = []  # 定义一个空的列表
    first_li = '<li><a href="/crm/practice_page/?page=1">首页</a></li>'  # 首页
    html_list.append(first_li)  # 添加首页
    if request_page_num == 1:  # 请求页(当前页)为第一页的话
        pre_li = '<li class="disabled"><a href="#"><<</a></li>'
    else:
        pre_li = '<li><a href="/crm/practice_page/?page={}"><<</a></li>'.format(request_page_num - 1)
    html_list.append(pre_li)
    for num in range(start_page, end_page + 1):
        if request_page_num == num:  # 增加active样式
            li_html = '<li class="active"><a href="/crm/practice_page/?page={0}">{0}</a></li>'.format(num)
        else:
            li_html = '<li><a href="/crm/practice_page/?page={0}">{0}</a></li>'.format(num)
        html_list.append(li_html)  # 添加下一页
    if request_page_num == all_count_pages_number:  # 如果已经是请求的最后一页
        next_li = '<li class="disabled"><a href="#">>></a></li>'
    else:
        next_li = '<li><a href="/crm/practice_page/?page={}">>></a></li>'.format(request_page_num + 1)
    html_list.append(next_li)
    last_li = '<li><a href="/crm/practice_page/?page={}">尾页</a></li>'.format(all_count_pages_number)
    html_list.append(last_li)  # 添加尾页
    html_str = mark_safe(''.join(html_list))

    '''
    切片请求数量
    页数  从         到
    1    0           9
    2    10          19
    n    (n-1)*10    
    '''
    each_page_start_number = (request_page_num - 1) * each_page_show_number
    each_page_end_number = request_page_num * each_page_show_number

    return render(request,
                  'crm/practice_page.html',
                  {'users': users[each_page_start_number:each_page_end_number],
                   # 'pages': range(start_page, end_page + 1),
                   'html_str': html_str})

10.封装成类,提供给别处使用

代码语言:javascript
复制
"""
分页器
"""
from django.utils.safestring import mark_safe


class Pagination:
    def __init__(self, request, all_data_length, each_page_show_number=10, max_show_page=11):
        """
        :param request:
        :param all_data_length: 数据的总长度
        :param each_page_show_number: 每一页需要展示多少条数据,默认 10 条
        :param max_show_page: 最大显示多少页
        """
        self.url = request.path_info
        self.each_page_show_number = each_page_show_number
        try:
            self.request_page_num = int(request.GET.get('page', 1))  # 获取请求页
            if self.request_page_num <= 0:
                self.request_page_num = 1
        except Exception as e:
            print('{}:分页请求参数非法!'.format(str(e)))
            self.request_page_num = 1

        self.request_page_num = int(self.request_page_num)  # 转化为 int 类型

        self.all_count_pages_number, more_page = divmod(all_data_length, each_page_show_number)
        if more_page:  # 如果有余数的话
            self.all_count_pages_number += 1

        half_page = max_show_page // 2  # 获取中间页码
        if self.all_count_pages_number <= max_show_page:  # 如果我的总的页数加起来还不满 11 格
            self.start_page = 1  # 起始页写死为 1
            self.end_page = self.all_count_pages_number  # 最后一页同样写死
        else:
            if self.request_page_num - half_page <= 0:  # start开始出现 0 了
                self.start_page = 1  # 卡死第一页是 1
                self.end_page = max_show_page  # 最后一页是 最大允许显示的页数
            elif self.request_page_num + half_page >= self.all_count_pages_number:  # 如果已经最大了
                self.start_page = self.all_count_pages_number - max_show_page + 1
                self.end_page = self.all_count_pages_number
            else:
                self.start_page = self.request_page_num - half_page  # 定义开始的页码
                self.end_page = self.request_page_num + half_page  # 定义结束的页码

    @property
    def each_page_start_number(self):
        """
        :return:但会某一页的开头的信息序号
        """
        return (self.request_page_num - 1) * self.each_page_show_number

    @property
    def each_page_end_number(self):
        return self.request_page_num * self.each_page_show_number

    @property
    def html_str(self):
        html_list = []  # 定义一个空的列表
        first_li = '<li><a href="{}?page=1">首页</a></li>'.format(self.url)  # 首页
        html_list.append(first_li)  # 添加首页
        if self.request_page_num == 1:  # 请求页(当前页)为第一页的话
            pre_li = '<li class="disabled"><a href="#"><<</a></li>'
        else:
            pre_li = '<li><a href="{}?page={}"><<</a></li>'.format(self.url, self.request_page_num - 1)
        html_list.append(pre_li)
        for num in range(self.start_page, self.end_page + 1):
            if self.request_page_num == num:  # 增加active样式
                li_html = '<li class="active"><a href="{0}?page={1}">{1}</a></li>'.format(self.url, num)
            else:
                li_html = '<li><a href="{0}?page={1}">{1}</a></li>'.format(self.url, num)
            html_list.append(li_html)  # 添加下一页
        if self.request_page_num == self.all_count_pages_number:  # 如果已经是请求的最后一页
            next_li = '<li class="disabled"><a href="#">>></a></li>'
        else:
            next_li = '<li><a href="{}?page={}">>></a></li>'.format(self.url, self.request_page_num + 1)
        html_list.append(next_li)
        last_li = '<li><a href="{}?page={}">尾页</a></li>'.format(self.url, self.all_count_pages_number)
        html_list.append(last_li)  # 添加尾页
        html_str = mark_safe(''.join(html_list))
        return html_str

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.设置浏览器的主题图片
  • 2.设置圆形的图片(图片原来是矩形)
  • 3.注意事项,关于导入 bootstrap
  • 4.注册models里面的表达admin后台
  • 5.定制admin后台的 verbose_name 和 verbose_name_plural
  • 6.obj.get_XX_display()的使用
    • 模板中使用,没有括号
      • 后台使用,有括号
      • 7.再次注意settings的默认日期显示格式
      • 8.mark_safe方法的使用
      • 9.关于如何设置实现一个分页功能
      • 10.封装成类,提供给别处使用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档