鱼C论坛

 找回密码
 立即注册
查看: 1135|回复: 4

[已解决]前台分页问题

[复制链接]
发表于 2023-5-10 15:40:18 | 显示全部楼层 |阅读模式
20鱼币
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[start:end]

        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})

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

出现的问题 前台 进行搜索完成后   数据量过多 分页工能不能正常使用  点击下一页是全部数据库的内容
最佳答案
2023-5-10 15:40:19

您可以将搜索关键字作为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)
    ...

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

最佳答案

查看完整内容

您可以将搜索关键字作为Cs类的一个属性,当搜索关键字存在时,在分页链接中添加搜索关键字;当搜索关键字不存在时,分页链接就不包含搜索关键字。您可以在构造函数中添加一个参数n,表示搜索关键字,并在html方法中根据是否存在搜索关键字来修改链接。 在Cs类的构造函数中添加: 然后在html方法中修改链接: 这样就可以在保持分页功能正常的同时,也能正确处理搜索关键字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 15:40:19 | 显示全部楼层    本楼为最佳答案   

您可以将搜索关键字作为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)
    ...

这样就可以在保持分页功能正常的同时,也能正确处理搜索关键字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 15:40:35 | 显示全部楼层
这个问题可能是因为在分页的时候没有正确传递搜索的关键字,导致分页显示的是全部数据库的内容。你需要在分页的链接中添加搜索关键字,这样才能保证分页的数据是正确的。可以修改  html()  方法中的分页链接,如下所示:
ele = '<li><a href="?q={}&ym={}">{}</a></li>'.format(n, i, i)
这样就能正确传递搜索关键字了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-10 15:50:46 | 显示全部楼层
本帖最后由 tengke 于 2023-5-10 15:53 编辑

这样字有点麻烦 有没有其他的方法呢
而且 如果我没有搜索 那么这个链接地址 会不会没有用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

大佬还在吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-28 03:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表