zoukankan      html  css  js  c++  java
  • Django 分页功能

    自定义分页

    view视图函数:

    def index_page(request,page):  #分页视图
        display_linkpage_count = 5   #页面下方展示的页面选项数量
        display_item = 10   #每页显示数据条目
        count = Host.objects.all().count()  #数据库中总条数
        all_page, current_page, start_item, end_item = postion(count, display_item, page)
        #调用postion函数处理
        result = Host.objects.all()[start_item:end_item]  #获取当前页要展示的数据
        current_count= Host.objects.all()[start_item:end_item].count() #当前页显示数据条目
    
        page_html = pager(current_page, all_page,display_linkpage_count)  #调用自定义分页函数
        ret = {'data':result,'count':count,'current_count':current_count,'page_html':page_html}
        return render(request,'ajax_app/index.html',ret)
    

    路由:

    url(r'^index_page/(?P<page>d*)', views.index_page, name='index_page')
    

    两个自定义的函数:

    from django.utils.safestring import mark_safe  #把字符串安全输出到前端
    def postion(count,display_item,page):
        all_page = int((count + display_item - 1) / display_item)  # 总页数,向上取整数,如5/2为3
        try:
            current_page = int(page)
            if current_page <= 0:  # 如果为负数,则默认为1
                current_page = 1
            elif current_page > all_page:
                current_page = all_page
        except Exception, e:
            current_page = 1  # 当前页ID,默认为1
        finally:
            pass
            #    Host.objects.all()获取到的数据返回为列表,从0开始
            #    0--9    Host.objects.all()[0:10] 前10个数据
            #    10--19  Host.objects.all()[10:20]
            #    20--29  Host.objects.all()[20:30]
        start_item = (current_page - 1) * display_item
        end_item = current_page * display_item
        return all_page,current_page,start_item,end_item
    
    def pager(current_page,all_page,display_linkpage_count):  #自定义分页
        #current_page为当前页,all_page为总页数,display_linkpage_count为下方要显示的页数链接
        temp_html = []
        first_html = "<a href='/ajax_app/index_page/%d'>首页</a>" % (1)
        temp_html.append(first_html)
        if current_page <=1:
            prev_html = "<a href='#'>上一页</a>"
        else:
            prev_html = "<a href='/ajax_app/index_page/%d'>上一页</a>" % (current_page - 1)
        temp_html.append(prev_html)
    
        begin = current_page - (display_linkpage_count / 2)
        end = current_page + (display_linkpage_count / 2)
    
        if all_page <= display_linkpage_count:  #当总页数小于下方要显示的页数链接
            begin = 1
            end = all_page
        else:
            if begin == 0:
                end = current_page + (current_page - begin + 1)
                begin = 1
            elif begin < 0:
                end = current_page + (current_page - begin + 1)+1
                begin = 1
            elif end > all_page:
                begin = current_page - (end - current_page + 1)
                end = all_page
    
        for i in range(begin,end+1):
            if current_page == i:
                a_html = "<a href='/ajax_app/index_page/%d' style='color: chartreuse'>%d</a>" % (i,i) #如果是当前页,则显示绿色
            else:
                a_html = "<a href='/ajax_app/index_page/%d'>%d</a>" % (i, i)
            temp_html.append(a_html)
    
        if current_page >= all_page:
            next_html = "<a href='#'>下一页</a>"
        else:
            next_html = "<a href='/ajax_app/index_page/%d'>下一页</a>" % (current_page+1)
        temp_html.append(next_html)
        end_html = "<a href='/ajax_app/index_page/%d'>尾页</a>" % (all_page)
        temp_html.append(end_html)
        temp_str = mark_safe('-'.join(temp_html))  # 使用mark_safe方法静态输出字符串,使用join方法将列表连接为字符串
        return temp_str
    

     html页面:

    <body>
        <h1>主机信息</h1>
        <table border="1">
            <tr>
                <td>主机名</td>
                <td>IP地址</td>
            </tr>
            {% for item in data %}
            <tr>
                <td>{{ item.hostname }}</td>
                <td>{{ item.IP }}</td>
            </tr>
            {% endfor %}
        </table>
        <div>
                <td>{{ page_html }}</td>
        </div>
        <div>当前页条数:{{ current_count }}</div>
        <div>总条数:{{ count }}</div>
    </body>
    

     

  • 相关阅读:
    nasm astrstr函数 x86
    nasm astrspn函数 x86
    nasm astrset_s函数 x86
    nasm astrrev函数 x86
    模板:最长公共子序列(LCS)
    模板:最小生成树(MST)
    模板:并查集
    模板:单源最短路径
    模板:最近公共祖先(LCA)
    模板:线段树(1)——加法,求和
  • 原文地址:https://www.cnblogs.com/honey-badger/p/8948169.html
Copyright © 2011-2022 走看看