django 添加分页和搜索

27 篇文章 0 订阅
27 篇文章 0 订阅

1 .在应用下创建tamplatetgs文件
2 .再在tamplatetags文件下创建pagetag.py
pagetag.py

from django import template
register = template.Library()
from django.utils.html import format_html


# 自定义分页标签
@register.simple_tag
def showpage(count,request):
    '''
    count  总页数
    request 请求对象
    '''

    # 接受当前的页码数
    p = int(request.GET.get('page',1))

    # 获取当前请求中所有参数
    data = request.GET.dict()
    args = ''
    for k,v in data.items():
        print(k,v)
        if k != 'page':
            args += '&'+k+'='+v
    # {'types': 'all', 'keywords': 'wu','page':2}
    # &types=all&keywords=wu
    # types=allkeywords=wu
    # &types=all&keywords=wu

    start = p-5
    end = p+4

    # 判断 如果当前页 小于 5
    if p <= 5:
        start = 1
        end = 10
    # 判断 如果当前页 大于 总页数-5
    if p > count-5:
        start = count-9
        end = count
    # 判断 如果总页数 小于 10
    if count < 10:
        start = 1
        end = count

    pagehtml = ''
    # 首页       #这里加?page=1{args}解决了换页搜索不会失效
    pagehtml += '<li><a href="?page=1{args}">首页</a></li>'.format(args=args)
    # 上一页
    if p > 1:
        pagehtml += '<li><a href="?page={p}{args}">上一页</a></li>'.format(p=p-1,args=args)

    for x in range(start,end+1):
        # 判断是否为当前页
        if p == x:
            pagehtml += '<li class="am-active"><a href="?page={p}{args}">{p}</a></li>'.format(p=x,args=args)
        else:
            pagehtml += '<li><a href="?page={p}{args}">{p}</a></li>'.format(p=x,args=args)
    # 下一页
    if p < count:				#这里加?page={p}{args}解决了换页搜索不会失效
        pagehtml += '<li><a href="?page={p}{args}">下一页</a></li>'.format(p=p+1,args=args)
    # 尾页
    pagehtml += '<li><a href="?page={p}{args}">尾页</a></li>'.format(p=count,args=args)
   # 如果不用format_html()返回 ,html将会被自动转义为字符串
    return format_html(pagehtml)

index.html

搜索

 <form>
 <div class="am-u-sm-12 am-u-md-6 am-u-lg-3">
     <div class="am-form-group tpl-table-list-select">
         <select name="types" data-am-selected="{btnSize: 'sm'}" style="display: none;">
           <option value="all" {% if request.GET.types == 'all' %} selected {% endif %}>全局搜索</option>
           <option value="phone" {% if request.GET.types == 'phone' %} selected {% endif %}>手机号</option>
           <option value="id" {% if request.GET.types == 'id' %} selected {% endif %}>ID</option>
           <option value="nikename" {% if request.GET.types == 'nikename' %} selected {% endif %}>昵称</option>
           <option value="email" {% if request.GET.types == 'email' %} selected {% endif %}>邮箱</option>
         </select>
     </div>
 </div>
 <div class="am-u-sm-12 am-u-md-12 am-u-lg-3">
     <div class="am-input-group am-input-group-sm tpl-form-border-form cl-p">
     							<!-- keywords 是搜索关键字 -->
         <input type="text" name="keywords" value="{{ request.GET.keywords }}" class="am-form-field ">
         <span class="am-input-group-btn">
             <button class="am-btn  am-btn-default am-btn-success tpl-table-list-field am-icon-search"></button>
           </span>
     </div>
 </div>
 </form>



分页
  <ul class="am-pagination tpl-pagination"> <!-- 装饰模块由u或py文件传过来的li完成 -->
      <!-- <li class="am-disabled"><a href="#">«</a></li> -->
      <!-- <li class="am-active"><a href="#">1</a></li> -->
    	<!-- 这里引入了 pagetag模块 -->
      {% load pagetag %}
		<!-- showpage 是pagetag模块的函数  通过reqest中间件请求过来 -->
		<!-- userlist.paginator.num_pages 是通过request中间件从views获取 -->
      {% showpage userlist.paginator.num_pages request %}
      <!-- <li><a href="#">»</a></li> -->
  </ul>

views.py

from django.shortcuts import render
from django.http import HttpResponse,JsonResponse

from django.contrib.auth.hashers import make_password, check_password
from .. models import Users

from web.settings import BASE_DIR

import os

# 会员列表
def user_index(request):

    # 获取所有用户数据
    data = Users.objects.all()

    # 获取搜索条件/比如: 全局搜索,手机号搜索,人名,
    types = request.GET.get('types',None)
    #获取搜索的关键字
    keywords = request.GET.get('keywords',None)
    # 判断是否搜索
    if types == 'all':
        from django.db.models import Q
        data = data.filter(Q(id__contains=keywords)|Q(nikename__contains=keywords)|Q(phone__contains=keywords)|Q(email__contains=keywords))
    elif types :
        search = {types+'__contains':keywords}
        data = data.filter(**search)

    # 导入分页类
    from django.core.paginator import Paginator
    # 实例化分页类
    p = Paginator(data, 10)
    # 获取当前的页码数
    pageindex = request.GET.get('page',1)
    # 获取当前页的数据
    userlist = p.page(pageindex)
    # 获取所有的页码
    # pages = p.page_range #这是获取一个可迭代对象
    # pages = p.num_pages

    # 分配数据
    context = {'userlist':userlist}

    # 加载模板
    return render(request,'myadmin/users/index.html',context)





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值