分页 组件
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 连接地址内容
显然关键在这里:
from app.cs import Cs
def cs(request):
css=Cs(request) # 这里执行后,走Cs类的实例化(初始化),然后 page = request.GET.get("ym", 1)--> 这里返回的是啥?一个int整数?还是字符串?
# 从报错推测,就是你这个page绑定到了一个整数int上了(即这个请求的返回了个int。。你自己检查吧。。) 这段代码中有一个问题,即在 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})
这样就可以正确处理查询参数并进行分页显示了。 isdkz 发表于 2023-5-9 16:55
这段代码中有一个问题,即在 Cs 类的构造函数中, pagesize 参数被写死为17,而在 viewws 文件中,没有传入 ...
不是啊 大佬 这个前台显示的数量没有问题我可以不用管的
我的问题是 前台搜索 ningx 这个字段 然后进行分页展示
搜索栏 与分页进行结合
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
根据您提供的代码和问题描述,可能是由于 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
希望这些信息对您有所帮助。
有用请设置最佳答案 hxd,太强了,在这里找到了答案,感激感激~~~呜呜呜。 看不懂啊看不懂 阿奇_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]