tengke 发表于 2023-5-14 18:55:05

大佬麻烦看看 后台获取的数据不是我想要的

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, )
      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'
"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

————————————————————————————————
但是我看视频为什么这个可以正常的使用呢

isdkz 发表于 2023-5-14 18:55:06

tengke 发表于 2023-5-14 19:13
self.quer.setlist("ym", )
      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参数返回正确的页面数据了。

isdkz 发表于 2023-5-14 18:55:30

这段代码中的问题主要是在使用 setlist 方法时,将 self.page 参数设置为了整数4,而不是字符串"4"。因此,生成的查询字符串中出现了"1=4"而不是"ym=4"。解决方法是将 self.page 参数设置为字符串"ym",如下所示:

self.quer.setlist("ym", )


另外,关于报错 'int' object has no attribute 'encode' ,是因为在调用 urlencode 方法时,传入了一个整数类型的参数,而该方法只接受字符串类型的参数。因此,需要将 self.quer 对象中所有的参数值都转换为字符串类型,可以使用如下代码:

for key, value in self.quer.items():
    self.quer.setlist(key, )


这样就可以正常使用 urlencode 方法生成查询字符串了。

陶远航 发表于 2023-5-14 18:56:04

这段代码似乎存在两个问题:

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

对于第二个问题,错误消息表明传递给urlencode的参数之一是整数('int' object has no attribute 'encode')。要解决这个问题,请确保传递给urlencode的参数都是字符串,而不是整数或其他数据类型。

tengke 发表于 2023-5-14 19:13:09

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

self.quer.setlist("ym", )
      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页的数据是第一页的数据 这个是为什么呢
页: [1]
查看完整版本: 大佬麻烦看看 后台获取的数据不是我想要的