博客
关于我
强烈建议你试试无所不能的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

    你可能感兴趣的文章
    PHP AJAX上传文件
    查看>>
    Swift4.0复习扩展
    查看>>
    Swift编码总结6
    查看>>
    pic
    查看>>
    vim
    查看>>
    Oracle Inventory Management Application Program Interface ( APIs) (Doc ID 729998.1)
    查看>>
    hdu_1060_Leftmost Digit_201311071827-2
    查看>>
    移动前端—图片压缩上传实践
    查看>>
    Android:如何显示网络图片(转)
    查看>>
    JAVA和.NET开发过程中的一些不同
    查看>>
    微分方程数值解Euler法
    查看>>
    [快速幂]a^b
    查看>>
    基于流的自动化构建工具------gulp (简单配置)
    查看>>
    【基本优化实践】【1.3】最大内存参数限制
    查看>>
    oracle 安装(一)
    查看>>
    MyEclipse8.5 打开菜单栏的help->Software Updates子菜单
    查看>>
    Apache 阿帕奇 配置运行环境
    查看>>
    [转]ofstream/ifstream 文本/二进制 方式 读入/写出 数据方法
    查看>>
    【VIM】vimrc文件的基本设置
    查看>>
    【实习项目记录】(三)调整网络图片固定宽高
    查看>>