tengke 发表于 2023-5-9 16:54:16

分页 组件

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)
      )
    else:
      ss = models.Userinfo.objects.all()
    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 连接地址内容



阿奇_o 发表于 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。。你自己检查吧。。)

isdkz 发表于 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)
      )
    else:
      ss = models.Userinfo.objects.all()
    return render(request, 'hrr.html', {'deat': ss})


这样就可以正确处理查询参数并进行分页显示了。

tengke 发表于 2023-5-9 17:16:25

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

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

我的问题是 前台搜索 ningx 这个字段   然后进行分页展示
搜索栏 与分页进行结合

tengke 发表于 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

sfqxx 发表于 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
希望这些信息对您有所帮助。
有用请设置最佳答案

Axiujiu 发表于 2023-5-10 09:22:50

hxd,太强了,在这里找到了答案,感激感激~~~呜呜呜。

yangyangwoaini 发表于 2023-5-10 09:31:15

看不懂啊看不懂

tengke 发表于 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)
      )
    else:
      ss = models.Userinfo.objects.all()
    return render(request, 'hrr.html', {'deat':ss})
页: [1]
查看完整版本: 分页 组件