鱼C论坛

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

[已解决]大佬麻烦看看 后台获取的数据不是我想要的

[复制链接]
发表于 2023-5-14 18:55:05 | 显示全部楼层 |阅读模式
15鱼币
class Cs(object):
    def __init__(self, request,ss,n="",pagesize=17,page="ym",plus=5
                 ):

        import copy
        quer = copy.deepcopy(request.GET)
        quer._mutable = True
        self.quer = quer
        self.page=page
def html(self):
         pagestrlist = []
        self.quer.setlist(self.page, [4])
        print(urlencode(self.quer))
        print(self.page)
        pagestrlist.append('<li class="active"><a href="?ym={}">首页</a></li>'.format(1))
后台显示的数据是 q=ddq&1=4
正常的来说应该是 q=ddq&ym=4  这个ym是html可以正常获取的关键字
————————————————————————
而且
       pagestrlist.append('<li class="active"><a href="?{}">首页</a></li>'.format(self.quer.urlencode())) 这个报错  
  File "D:\软件\djangoProject\venv\lib\site-packages\django\http\request.py", line 598, in <genexpr>
    for v in list_
AttributeError: 'int' object has no attribute 'encode'
[14/May/2023 18:51:33] "GET /cs/?q=ddq HTTP/1.1" 500 192405

修改完在这个前台链接地址显示的是如下链接地址
        pagestrlist.append('<li class="active"><a href="?{}">首页</a></li>'.format(urlencode(self.quer)))
http://127.0.0.1:8000/cs/?q=ddq&1=4

————————————————————————————————
但是我看视频为什么这个可以正常的使用呢
}5VO81MED3ODL{HPA8X17.png
最佳答案
2023-5-14 18:55:06
tengke 发表于 2023-5-14 19:13
self.quer.setlist("ym", [4])
        print(urlencode(self.quer))

看起来链接已经生成正确了,那么问题可能出在你处理这个链接的后端代码上。当你点击这个链接,你的应用会收到一个GET请求,这个请求的query string中包含了"ym=4"。你的应用需要识别并正确处理这个参数。

如果你的应用没有正确处理这个参数,那么它可能会忽视这个参数,只返回第一页的数据。你需要检查一下你的视图函数或者控制器,看看它是如何处理这个参数的。

一般来说,你可能需要做的是这样的:
def my_view(request):
    page_number = request.GET.get('ym', 1)  # 如果没有提供ym参数,那么默认为1
    page_number = int(page_number)  # 将ym参数转换为整数
    # 然后使用这个页码去查询数据库,返回相应的数据

如果你的应用使用的是Django的分页功能,那么你可以使用Paginator类来处理这个页码:
from django.core.paginator import Paginator

def my_view(request):
    page_number = request.GET.get('ym', 1)
    page_number = int(page_number)
    
    items = MyModel.objects.all()  # MyModel是你的数据模型
    paginator = Paginator(items, 17)  # 假设每页有17个元素
    page = paginator.get_page(page_number)  # 获取指定页码的数据
    
    # 然后将这个page对象传递给模板

这样,你就可以根据链接中的ym参数返回正确的页面数据了。

最佳答案

查看完整内容

看起来链接已经生成正确了,那么问题可能出在你处理这个链接的后端代码上。当你点击这个链接,你的应用会收到一个GET请求,这个请求的query string中包含了"ym=4"。你的应用需要识别并正确处理这个参数。 如果你的应用没有正确处理这个参数,那么它可能会忽视这个参数,只返回第一页的数据。你需要检查一下你的视图函数或者控制器,看看它是如何处理这个参数的。 一般来说,你可能需要做的是这样的: 如果你的应用 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-14 18:55:06 | 显示全部楼层    本楼为最佳答案   
tengke 发表于 2023-5-14 19:13
self.quer.setlist("ym", [4])
        print(urlencode(self.quer))

看起来链接已经生成正确了,那么问题可能出在你处理这个链接的后端代码上。当你点击这个链接,你的应用会收到一个GET请求,这个请求的query string中包含了"ym=4"。你的应用需要识别并正确处理这个参数。

如果你的应用没有正确处理这个参数,那么它可能会忽视这个参数,只返回第一页的数据。你需要检查一下你的视图函数或者控制器,看看它是如何处理这个参数的。

一般来说,你可能需要做的是这样的:
def my_view(request):
    page_number = request.GET.get('ym', 1)  # 如果没有提供ym参数,那么默认为1
    page_number = int(page_number)  # 将ym参数转换为整数
    # 然后使用这个页码去查询数据库,返回相应的数据

如果你的应用使用的是Django的分页功能,那么你可以使用Paginator类来处理这个页码:
from django.core.paginator import Paginator

def my_view(request):
    page_number = request.GET.get('ym', 1)
    page_number = int(page_number)
    
    items = MyModel.objects.all()  # MyModel是你的数据模型
    paginator = Paginator(items, 17)  # 假设每页有17个元素
    page = paginator.get_page(page_number)  # 获取指定页码的数据
    
    # 然后将这个page对象传递给模板

这样,你就可以根据链接中的ym参数返回正确的页面数据了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-14 18:55:30 | 显示全部楼层
这段代码中的问题主要是在使用 setlist 方法时,将 self.page 参数设置为了整数4,而不是字符串"4"。因此,生成的查询字符串中出现了"1=4"而不是"ym=4"。解决方法是将 self.page 参数设置为字符串"ym",如下所示:
self.quer.setlist("ym", [4])
另外,关于报错 'int' object has no attribute 'encode' ,是因为在调用 urlencode 方法时,传入了一个整数类型的参数,而该方法只接受字符串类型的参数。因此,需要将 self.quer 对象中所有的参数值都转换为字符串类型,可以使用如下代码:
for key, value in self.quer.items():    self.quer.setlist(key, [str(v) for v in value])
这样就可以正常使用 urlencode 方法生成查询字符串了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-14 18:56:04 | 显示全部楼层
这段代码似乎存在两个问题:

生成的URL中包含1=4,而不是应该正确的关键字ym=4。
使用self.quer.urlencode()时出现错误。
为了解决第一个问题,看起来是代码中的self.quer.setlist(self.page, [4])这行引起了问题。这段代码将page变量相关的值设置为4,因此在URL中被表示为1=4。相反,您应该调用self.quer['ym'] = 4,将ym关键字的值设为4。

对于第二个问题,错误消息表明传递给urlencode的参数之一是整数('int' object has no attribute 'encode')。要解决这个问题,请确保传递给urlencode的参数都是字符串,而不是整数或其他数据类型。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-14 19:13:09 | 显示全部楼层
isdkz 发表于 2023-5-14 18:55
这段代码中的问题主要是在使用 setlist 方法时,将 self.page 参数设置为了整数4,而不是字符串"4"。因此, ...

self.quer.setlist("ym", [4])
        print(urlencode(self.quer))

        pagestrlist.append('<li class="active"><a href="?{}">首页</a></li>'.format(urlencode(self.quer)))

这个的我修改为你提供的  我也在前台界面成功的显示了对应的链接地址
http://127.0.0.1:8000/cs/?q=ddq&ym=4
可是这个链接地址显示的数据不是第4页的数据  是第一页的数据 这个是为什么呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 05:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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