博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django之分页
阅读量:5308 次
发布时间:2019-06-14

本文共 6490 字,大约阅读时间需要 21 分钟。

I.Django内置分页

 

指令:

"""    per_page: 每页显示条目数量    count:    数据总个数    num_pages:总页数    page_range:总页数的索引范围,如: (1,10),(1,200)    page:     page对象     has_next              是否有下一页    next_page_number      下一页页码    has_previous          是否有上一页    previous_page_number  上一页页码    object_list           分页之后的数据列表    number                当前页    paginator             paginator对象     """

 

 

插入数据:

"""    #插数据    for i in range(100):    n = 'root'+str(i)    models.Books.objects.create(title=n)    #插数据(首选)    book_list = []    #[
.....] for i in range(100): book_list.append(models.Books(title="book%s" % i)) models.Books.objects.bulk_create(book_list) """

 

 

 

代码示例:

urls.py

url(r'^index/',views.index),

 

views.py

from django.core.paginator import Paginator,Page,PageNotAnInteger,EmptyPagedef index(request):    """    分页    :param request:    :return:    """    # for i in range(300):   #插数据    #     n='root'+str(i)    #     models.Boy.objects.create(name=n)    current_page=request.GET.get('page')    boy_list=models.Boy.objects.all()    paginator =Paginator(boy_list,10)    try:        posts=paginator.page(current_page)    except PageNotAnInteger as e:        posts=paginator.page(1)    except EmptyPage as e:        posts=paginator.page(1)    return render(request,'in.html',{
'posts':posts})
View Code

 

in.html

    
内置分页

用户列表

    {% for f in posts.object_list %}
  • {
    { f.name }}
  • {% endfor %}
{% if posts.has_previous %}
上一页 {% endif %} {% for num in posts.paginator.page_range %}
{
{ num }}
{% endfor %} {% if posts.has_next %}
下一页 {% endif %}
View Code

 

#注意点:Django内置分页 不适合 页码显示,适合 上一页和下一页。(若用,会显示所有页码)

 

 

II.Django 自定义分页

urls.py

url(r'^custom/',views.custom),

 views.py

from utils.pager import PageInfodef custom(request):   all_count = models.Boy.objects.all().count()   page_info = PageInfo(request.GET.get('page'),all_count,10,'/custom',11)   boy_list = models.Boy.objects.all()[page_info.start():page_info.end()]   return render(request,'custom.html',locals())
View Code

 

 custom.html

    
自定义分页

用户列表

    {% for row in boy_list %}
  • {
    { row.name }}
  • {% endfor %}
View Code

 

 

 pager.py

class PageInfo(object):    def __init__(self,current_page,all_count,per_page,base_url,show_page=11):        """        :param current_page:        :param all_count:数据总行数        :param per_page:        :param base_url:        :param show_page:        """        try:            self.current_page=int(current_page)        except Exception as e:            self.current_page = 1        self.per_page = per_page        a,b = divmod(all_count,per_page)        if b:            a=a+1        self.all_pager = a        self.show_page = show_page        self.base_url = base_url    def start(self):        return (self.current_page-1) * self.per_page    def end(self):        return self.current_page * self.per_page    def pager(self):        page_list = []        half = int((self.show_page-1)/2)        #如果数据总页数<11        if self.all_pager < self.show_page:            begin=1            stop = self.all_pager + 1        #如果数据总页数 > 11        else:            #数据当前页 <=5,永远显示1,11            if self.current_page <= half:                begin = 1                stop = self.show_page + 1            else:                if self.current_page + half > self.all_pager:                    begin = self.all_pager - self.show_page + 1                    stop = self.all_pager + 1                else:                    begin = self.current_page - half                    stop = self.current_page + half + 1            if self.current_page <= 1:                prev = '
  • 上一页
  • ' else: prev="
  • 上一页
  • "%(self.base_url,self.current_page-1) page_list.append(prev) for i in range(begin,stop): if i==self.current_page: temp = '
  • %s
  • '%(self.base_url,i,i,) else: temp="
  • %s
  • "%(self.base_url,i,i,) page_list.append(temp) if self.current_page >= self.all_pager: nex="
  • 下一页
  • " else: nex="
  • 下一页
  • "%(self.base_url,self.current_page+1,) page_list.append(nex) return ''.join(page_list)
    View Code

     

     

     III.Django 自定义分页

     #-------更多的使用模块

    urls.py

    url(r'^$',views.books),     #使用的根目录

     

    views.py

    from django.core.paginator import Paginator,EmptyPage,PageNotAnIntegerdef books(req):      book_list_all=models.Books.objects.all()    p_obj = Paginator(book_list_all,20)    #--------------------p_obj    print(p_obj.count)       #100    print(p_obj.num_pages)   #5    print(p_obj.page_range)  #!!!    #-------------------------------    page_num = req.GET.get('page')    try:        book_list = p_obj.page(page_num)    except EmptyPage:        book_list = p_obj.page(p_obj.num_pages)    except PageNotAnInteger:        book_list = p_obj.page(1)    return render(req,'show.html',locals())
    View Code

     

    show.html

        
    分页显示
      {% for book in book_list %}
    • {
      { book.title }}
    • {% endfor %}
    View Code

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    1.简单登录

    view.py

    def login(request):    if request.method == 'GET':        return render(request,'login.html')    else:        u = request.POST.get('user')        p = request.POST.get('pwd')        if u=='alex' and p=='123':            request.session['username']='alex'            request.session['email'] = 'alex3714@qq.com'            return redirect('/index/')        else:            return render(request,'login.html',{
    'msg':'用户名或密码错误'})def index(request): return HttpResponse('登录成功')
    View Code

    login.html

        
    {
    % csrf_token %}
    {
    { msg }}
    View Code

     

    转载于:https://www.cnblogs.com/zhaochangbo/p/7096251.html

    你可能感兴趣的文章
    python升级安装后的yum的修复
    查看>>
    Vim配置Node.js开发工具
    查看>>
    web前端面试题2017
    查看>>
    ELMAH——可插拔错误日志工具
    查看>>
    MySQL学习笔记(四)
    查看>>
    【Crash Course Psychology】2. Research & Experimentation笔记
    查看>>
    两数和
    查看>>
    移动设备和SharePoint 2013 - 第3部分:推送通知
    查看>>
    SOPC Builder中SystemID
    查看>>
    MySQL数据库备份工具mysqldump的使用(转)
    查看>>
    青海行--(7月19日)麦积山石窟
    查看>>
    NTP服务器配置
    查看>>
    【转】OO无双的blocking/non-blocking执行时刻
    查看>>
    深入理解java集合框架(jdk1.6源码)
    查看>>
    php截取后台登陆密码的代码
    查看>>
    选假球的故事
    查看>>
    ul li剧中对齐
    查看>>
    关于 linux 的 limit 的设置
    查看>>
    模块搜索路径
    查看>>
    如何成为一名优秀的程序员?
    查看>>