tengke 发表于 2023-5-10 15:40:18

前台分页问题

cs 文件
from django.db.models import Q
from app import models
from django.utils.safestring import mark_safe


class Cs(object):
    def __init__(self, request,ss,pagesize=17,page="ym",plus=5
               ):
      page = request.GET.get(page, "")
      if page.isdecimal():
            page = int(page)
      else:
            page = 1
      self.page=page
      self.pagesize=pagesize
      start = (page - 1) * pagesize
      end = page * pagesize
      self.start= start
      self.end = end
      print(start,end)
      print(page,self.pagesize)

      self.ssxs=ss

      total_cout = ss.count()
      # print(total_cout)
      totalpagecount, div = divmod(total_cout, self.pagesize)
      if div:
            totalpagecount += 1
      self.totalpagecount=totalpagecount




      ##底部分页
    def html(self):
      plus = 5
      startpage = self.page - plus
      endpage = self.page + plus + 1
      if self.totalpagecount <= 2 * plus + 1:
            startpage = 1
            endpage = 2 * plus + 1
      else:
            if self.page <= plus:
                startpage = 1
                endpage = 2 * plus + 1
            else:
                if (self.page + plus) > self.totalpagecount:
                  endpage = totalpagecount
                  startpage = totalpagecount - 2 * plus
                else:
                  startpage = self.page - plus
                  endpage = self.page + plus
      pagestrlist = []
      pagestrlist.append('<li class="active"><a href="?ym={}">首页</a></li>'.format(1))
      if self.page > 1:
            prev = '<li class="active"><a href="?ym={}">上一页</a></li>'.format(self.page - 1)
            pagestrlist.append(prev)
      else:
            prev = '<li class="active"><a href="?ym={}">上一页</a></li>'.format(1)
            pagestrlist.append(prev)
      for i in range(startpage, endpage + 1):
            if i == self.page:
                ele = '<li class="active"><a href="?ym={}">{}</a></li>'.format(i, i)
            else:
                ele = '<li><a href="?ym={}">{}</a></li>'.format(i, i)
            pagestrlist.append(ele)
      if self.page < self.totalpagecount:
            prev = '<li class="active"><a href="?ym={}">下一页</a></li>'.format(self.totalpagecount + 1)
            pagestrlist.append(prev)
      else:
            prev = '<li class="active"><a href="?ym={}">下一页</a></li>'.format(self.totalpagecount)
            pagestrlist.append(prev)
      pagestrlist.append('<li class="active"><a href="?ym={}">尾页</a></li>'.format(self.totalpagecount))
      pagestrlost = mark_safe("".join(pagestrlist))
      return pagestrlost




——————————————————————————————————————————————————————————————
views。py文件 内容
from app.cs import Cs
def cs(request):
    n = request.GET.get('q',"")
    ss = models.Userinfo.objects.filter(
            Q(id__icontains=n) |
            Q(name__icontains=n) |
            Q(password__icontains=n) |
            Q(age__icontains=n) |
            Q(daa__icontains=n)
      )
    css = Cs(request,ss)
    return render(request, 'hrr.html', {'deat': css.ssxs,"ym":css.html})

——————————————————————
问题是   前台界面 可以正常显示数据库所有内容也可以搜索数据库内容

出现的问题 前台 进行搜索完成后   数据量过多 分页工能不能正常使用点击下一页是全部数据库的内容

isdkz 发表于 2023-5-10 15:40:19

tengke 发表于 2023-5-10 16:00
大佬还在吗

您可以将搜索关键字作为Cs类的一个属性,当搜索关键字存在时,在分页链接中添加搜索关键字;当搜索关键字不存在时,分页链接就不包含搜索关键字。您可以在构造函数中添加一个参数n,表示搜索关键字,并在html方法中根据是否存在搜索关键字来修改链接。

在Cs类的构造函数中添加:

class Cs(object):
    def __init__(self, request, ss, n="", pagesize=17, page="ym", plus=5):
      ...
      self.n = n
      ...


然后在html方法中修改链接:

def html(self):
    ...
    for i in range(startpage, endpage + 1):
      if self.n:
            if i == self.page:
                ele = '<li class="active"><a href="?q={}&ym={}">{}</a></li>'.format(self.n, i, i)
            else:
                ele = '<li><a href="?q={}&ym={}">{}</a></li>'.format(self.n, i, i)
      else:
            if i == self.page:
                ele = '<li class="active"><a href="?ym={}">{}</a></li>'.format(i, i)
            else:
                ele = '<li><a href="?ym={}">{}</a></li>'.format(i, i)
      pagestrlist.append(ele)
    ...


这样就可以在保持分页功能正常的同时,也能正确处理搜索关键字了。

isdkz 发表于 2023-5-10 15:40:35

这个问题可能是因为在分页的时候没有正确传递搜索的关键字,导致分页显示的是全部数据库的内容。你需要在分页的链接中添加搜索关键字,这样才能保证分页的数据是正确的。可以修改html()方法中的分页链接,如下所示:

ele = '<li><a href="?q={}&ym={}">{}</a></li>'.format(n, i, i)


这样就能正确传递搜索关键字了。

tengke 发表于 2023-5-10 15:50:46

本帖最后由 tengke 于 2023-5-10 15:53 编辑

这样字有点麻烦 有没有其他的方法呢
而且 如果我没有搜索 那么这个链接地址 会不会没有用了

tengke 发表于 2023-5-10 16:00:57

isdkz 发表于 2023-5-10 15:40
这个问题可能是因为在分页的时候没有正确传递搜索的关键字,导致分页显示的是全部数据库的内容。你需要在分 ...

大佬还在吗
页: [1]
查看完整版本: 前台分页问题