使用Django分页时持续出现‘object of type method has no len()’错误怎么办?
解决‘object of type 'method' has no len()’错误
你遇到的问题根源在这行代码:
allPosts = Post.objects.all().order_by("id").reverse
reverse是QuerySet的方法,你现在只是把方法本身赋值给了allPosts,而没有执行它。Paginator需要接收一个可计算长度的对象(比如QuerySet),但方法对象没有len(),所以触发了这个错误。
只需要给reverse加上括号,让它执行并返回反转后的QuerySet就行:
from django.core.paginator import Paginator def index(request): # 给reverse加上括号,执行方法获取反转后的QuerySet allPosts = Post.objects.all().order_by("id").reverse() #paginator paginator = Paginator(allPosts, 10) page_number = request.GET.get('page') posts_of_page = paginator.get_page(page_number) return render(request, "network/index.html", { "allPosts" : allPosts, "posts_of_page" : posts_of_page, })
另外提一句,其实你也可以直接用order_by("-id")来替代order_by("id").reverse(),效果完全一致,代码还更简洁:
allPosts = Post.objects.all().order_by("-id")
内容的提问来源于stack exchange,提问作者Snowbreak
相关产品推荐
相关产品推荐

