鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 8

[已解决]分页 组件

[复制链接]
发表于 2023-5-9 16:54:16 | 显示全部楼层 |阅读模式
5鱼币
class Cs(object):
    def __init__(self, request,page="page",pagesize=17
                 ):
        page = request.GET.get("ym", 1)
        if page.isdecimal():
            page = int(page)
        else:
            page = 1
        self.page = page
        self.pagesize = 17
        self.start = (page - 1) * pagesize
        self.end = page * pagesize





这个是 viewws文件 内容

from app.cs import Cs
def cs(request):
    css=Cs(request)
    n = request.GET.get('q')
    if n:
        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.start:css.end]
    else:
        ss = models.Userinfo.objects.all()[css.start:css.end]
    return render(request, 'hrr.html', {'deat':ss})


————
实验结果   前台可以正常显示
http://127.0.0.1:8000/cs/?ym=4 这个连接地址


不能正常显示
http://127.0.0.1:8000/cs/?q=nginx 连接地址内容


{@SB]Q$$J1K[Z`RNJ~2S5LF.png ~4(SX}LH`75M@L6%~5MJJHB.png QN8@OJPX%)YKFG@9O`}1WCN.png
最佳答案
2023-5-9 16:54:17
显然关键在这里:
from app.cs import Cs
def cs(request):
    css=Cs(request)   # 这里执行后,走Cs类的实例化(初始化),然后 page = request.GET.get("ym", 1)  --> 这里返回的是啥?一个int整数?还是字符串?
    # 从报错推测,就是你这个page绑定到了一个整数int上了(即这个请求的返回了个int。。你自己检查吧。。)

最佳答案

查看完整内容

显然关键在这里: from app.cs import Cs def cs(request): css=Cs(request) # 这里执行后,走Cs类的实例化(初始化),然后 page = request.GET.get("ym", 1) --> 这里返回的是啥?一个int整数?还是字符串? # 从报错推测,就是你这个page绑定到了一个整数int上了(即这个请求的返回了个int。。你自己检查吧。。)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 16:54:17 | 显示全部楼层    本楼为最佳答案   
显然关键在这里:
from app.cs import Cs
def cs(request):
    css=Cs(request)   # 这里执行后,走Cs类的实例化(初始化),然后 page = request.GET.get("ym", 1)  --> 这里返回的是啥?一个int整数?还是字符串?
    # 从报错推测,就是你这个page绑定到了一个整数int上了(即这个请求的返回了个int。。你自己检查吧。。)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 16:55:05 | 显示全部楼层
这段代码中有一个问题,即在 Cs 类的构造函数中, pagesize 参数被写死为17,而在 viewws 文件中,没有传入 pagesize 参数,因此 Css 类的 self.pagesize 属性始终为17,而不是期望的每页显示的条目数。

要解决这个问题,可以将 Cs 类的构造函数修改为如下代码:
class Cs(object):
    def __init__(self, request, page="page", pagesize=17):
        page = request.GET.get(page, 1)
        if page.isdecimal():
            page = int(page)
        else:
            page = 1
        self.page = page
        self.pagesize = pagesize
        self.start = (page - 1) * pagesize
        self.end = page * pagesize

这里将 pagesize 参数设置为可选参数,并在构造函数中使用 request.GET.get(page, 1) 获取每页显示的条目数,如果没有传入 page 参数,则默认为1。

在 viewws 文件中,将 Css 类的实例化改为:
css = Cs(request, pagesize=10)

这样,每页显示的条目数就是10条,可以根据实际需要进行调整。

另外,在处理查询参数 q 时,也需要对 Css 类进行实例化,并使用实例的 start 和 end 属性来获取分页数据。修改后的代码如下:
def cs(request):
    css = Cs(request, pagesize=10)
    n = request.GET.get('q')
    if n:
        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.start:css.end]
    else:
        ss = models.Userinfo.objects.all()[css.start:css.end]
    return render(request, 'hrr.html', {'deat': ss})

这样就可以正确处理查询参数并进行分页显示了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-9 17:16:25 | 显示全部楼层
isdkz 发表于 2023-5-9 16:55
这段代码中有一个问题,即在 Cs 类的构造函数中, pagesize 参数被写死为17,而在 viewws 文件中,没有传入 ...

不是啊 大佬   这个前台显示的数量没有问题  我可以不用管的

我的问题是 前台搜索 ningx 这个字段   然后进行分页展示
搜索栏 与分页进行结合
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-9 18:24:15 | 显示全部楼层
from django.db.models import Q
from app import models

class Cs(object):
    def __init__(self, request,pagesize=17):

        self.n = request.GET.get('q', "")
        self.ss = models.Userinfo.objects.filter(
            Q(id__icontains=self.n) |
            Q(name__icontains=self.n) |
            Q(password__icontains=self.n) |
            Q(age__icontains=self.n) |
            Q(daa__icontains=self.n)
        )
上面的代码单独运行是没有问题的
我想加上一个  一个界面只显示一部分的数据 代码


以前代码是类似这样的
  self.page = request.GET.get("ym")
        if page.isdecimal():
            page = int(page)
        else:
            page = 1
        self.page = page
        self.pagesize = pagesize
        self.start = (page - 1) * pagesize
        self.end = page * pagesize
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-9 19:11:14 | 显示全部楼层
根据您提供的代码和问题描述,可能是由于 pagesize 赋值的位置不正确导致的。

具体来说,初始化函数 __init__() 中,self.pagesize 直接赋值为 17,而没有使用传入的 pagesize。因此,无论在 GET 请求中传入什么值,都不会影响 self.pagesize 的取值。

建议将 self.pagesize 的赋值语句改为:
self.pagesize = pagesize
这样就能够正常使用 GET 请求中传入的 pagesize 值了。如果您需要使用默认值 17,可以将调用 Cs 对象时的 pagesize 参数省略或赋值为 None。

另外,由于您的 GET 请求中包含参数 q,估计是用于查询操作的,应当在对应的条件语句中修改 css.start 和 css.end 的取值。

针对查询操作的实现,您可以参考以下示例:(其中,假设将满足查询条件的记录全部返回)
if n:
    query_set = models.Userinfo.objects.filter(
        Q(id__icontains=n) |
        Q(name__icontains=n) |
        Q(password__icontains=n) |
        Q(age__icontains=n) |
        Q(daa__icontains=n)
    )
else:
    query_set = models.Userinfo.objects.all()

ss = query_set[css.start:css.end]
希望这些信息对您有所帮助。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 09:22:50 | 显示全部楼层
hxd,太强了,在这里找到了答案,感激感激~~~呜呜呜。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 09:31:15 | 显示全部楼层
看不懂啊看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-10 11:10:04 | 显示全部楼层
阿奇_o 发表于 2023-5-10 00:08
显然关键在这里:
from app.cs import Cs
def cs(request):

大概明白了  这个是我修改后的 内容
from django.db.models import Q
from app import models

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



from app.cs import Cs
def cs(request):
    css=Cs(request)
    n = request.GET.get('q')
    if n:
        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.start:css.end]
    else:
        ss = models.Userinfo.objects.all()[css.start:css.end]
    return render(request, 'hrr.html', {'deat':ss})
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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