Django自定义分页

  • 自定义分页一:

views:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.shortcuts import render,render_to_response
from app01 import models

# Create your views here. def index(request, page):#用于获取前台get传来的数据 #操作数据库进行分页 page = int(page)#此时需要进行整数运算,所以需要强制类型转换 #per_item = 5 #第一页0-5,(page-1)*5 page*5 start = (page-1)*5 end = page*5 count = models.host.objects.all()[start:end].count()#此时就是实现了一部分一部分的获取数据 data = models.host.objects.all()[start:end] ret = {'data':data,'count':count} return render_to_response('index.html',ret)

index:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
        <h1>主机信息</h1>
        <table border="1" >
            {% for item in data %}
                <tr >
                    <td>{{ item.hostname }}</td>
                    <td>{{ item.ip}}</td>
                    <br />
                </tr>
            {% endfor %}
        </table>
        <div>总条数:{{ count }}</div>
</body>
</html>

urls:

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/(d+)', views.index),#id用于获取用户输入的页数
]

models:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models

# Create your models here.
class host(models.Model):
    hostname = models.CharField(max_length=256)
    ip = models.GenericIPAddressField()

此时的页面:

  • 自定义分页二(进化版):

 views:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render,render_to_response

from app01 import models
from django.utils.safestring import mark_safe
# Create your views here.


def index(request, page):

    #判断获取的 值是否为整数
    try:
        page = int(page)
    except Exception,e:
        page = 1

    per_item = 5

    start = (page-1)*5
    end = page*5
    count = models.host.objects.all().count()
    data = models.host.objects.all()[start:end]

    #判断需要分几页,divmod()是一个求商和余的函数
    temp = divmod(count,per_item)
    if temp[1] == 0:
        all_page_count = temp[0]
    else:
        all_page_count = temp[0]+1

    page_html=[]
    first_html = "<a href='/index/%d'>首页</a>"%(1,)
    page_html.append(first_html)
    for i in range(all_page_count):
        a_html = "<a href='/index/%d'>%d</a>"%(i+1,i+1)
        page_html.append(a_html)
    end_html = "<a href='/index/%d'>尾页</a>" % (all_page_count,)
    page_html.append(end_html)
    page = mark_safe(''.join(page_html))#想要在页面上显示关键字就必须要确认他不是类似跨站脚本的东西



    ret =  {'data':data,'count':count,'page':page}

    return render_to_response('index.html',ret)

html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">

</head>
<body>
        <h1>主机信息</h1>
        <table border="1" >
            {% for item in data %}
                <tr >
                    <td>{{ item.hostname }}</td>
                    <td>{{ item.ip}}</td>
                    <br />
                </tr>
            {% endfor %}
        </table>
        <div>总条数:{{ count }}</div>
        {{ page }}
</body>
</html>

其余一样

显示页面:

  • 自定义分页(第三种):

views:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render,render_to_response

from app01 import models
from django.utils.safestring import mark_safe
# Create your views here.


def index(request, page):

    #判断获取的 值是否为整数
    try:
        page = int(page)
    except Exception,e:
        page = 1

    per_item = 5

    start = (page-1)*5
    end = page*5
    count = models.host.objects.all().count()
    data = models.host.objects.all()[start:end]

    #判断需要分几页,divmod()是一个求商和余的函数
    temp = divmod(count,per_item)
    if temp[1] == 0:
        all_page_count = temp[0]
    else:
        all_page_count = temp[0]+1

    page_html=[]

    first_html = "<a href='/index/%d'>首页</a>" % (1,)
    page_html.append(first_html)

    if page == 1:
        prv_html = "<a href='/index/#'>上一页</a>"
    else:
        prv_html =  "<a href='/index/%d'>上一页</a>"%(page-1,)
    page_html.append(prv_html)




    for i in range(all_page_count):
        if page == i+1:
            a_html = "<a style='color:red;' href='/index/%d'>%d</a>"%(i+1,i+1)
        else:
            a_html = "<a href='/index/%d'>%d</a>"%(i+1,i+1)
        page_html.append(a_html)

    next_html = "<a href='/index/%d'>下一页</a>" % (page+1,)
    page_html.append(next_html)

    end_html = "<a href='/index/%d'>尾页</a>" % (all_page_count,)
    page_html.append(end_html)
    page = mark_safe(''.join(page_html))#想要在页面上显示关键字就必须要确认他不是类似跨站脚本的东西



    ret =  {'data':data,'count':count,'page':page}

    return render_to_response('index.html',ret)

  

  •  自定义分页(第四种):
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render,render_to_response

from app01 import models
from django.utils.safestring import mark_safe
# Create your views here.


def index(request, page):

    #判断获取的 值是否为整数
    try:
        page = int(page)
    except Exception,e:
        page = 1

    per_item = 3

    start = (page-1)*per_item
    end = page*per_item
    count = models.host.objects.all().count()
    data = models.host.objects.all()[start:end]

    #判断需要分几页,divmod()是一个求商和余的函数
    temp = divmod(count,per_item)
    if temp[1] == 0:
        all_page_count = temp[0]
    else:
        all_page_count = temp[0]+1

    page_html=[]

    first_html = "<a href='/index/%d'>首页</a>" % (1,)
    page_html.append(first_html)

    if page == 1:
        prv_html = "<a href='/index/#'>上一页</a>"
    else:
        prv_html =  "<a href='/index/%d'>上一页</a>"%(page-1,)
    page_html.append(prv_html)

    #当所分的页数特别多时,需要微量显示
    if all_page_count < 11:
        begin = 0
        end = all_page_count
    else:
        if page < 6:
            begin = 0
            end = 12
        else:
            if page + 6> all_page_count:
                begin = page -5
                end = all_page_count
            else:
                begin = page - 5
                end = page + 6

    for i in range(begin,end):
        if page == i+1:
            a_html = "<a style='color:red;' href='/index/%d'>%d</a>"%(i+1,i+1)
        else:
            a_html = "<a href='/index/%d'>%d</a>"%(i+1,i+1)
        page_html.append(a_html)

    next_html = "<a href='/index/%d'>下一页</a>" % (page+1,)
    page_html.append(next_html)

    end_html = "<a href='/index/%d'>尾页</a>" % (all_page_count,)
    page_html.append(end_html)
    page = mark_safe(''.join(page_html))#想要在页面上显示关键字就必须要确认他不是类似跨站脚本的东西



    ret =  {'data':data,'count':count,'page':page}

    return render_to_response('index.html',ret)

  

 

 

原文地址:https://www.cnblogs.com/bill2014/p/6979022.html