在Django中,我使用如下的分页器:
来自django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
def myView(request):
...
paginator = Paginator(Annonce.objects.filter(name="huhu"), 10)
paginator._count = s.count()
try:
annonces = paginator.page(page)
except PageNotAnInteger:
annonces = paginator.page(1)
except EmptyPage:
annonces = paginator.page(paginator.num_pages)
在s.search()函数中,我对postgres db进行查询。
事实证明,即使我每页显示10个项目,查询也不受限制。
我尝试使用Annonce.objects.filter(name="huhu")[:10]
限制查询并自行指定计数。但是如果我这样做,分页器就不起作用了。
有没有办法对此进行优化?
答案 0 :(得分:10)
使用此示例https://docs.djangoproject.com/en/dev/topics/pagination/#using-paginator-in-a-view作为编写适当使用django Paginator的视图函数的指南。
请注意,在示例代码段中 -
def listing(request):
contact_list = Contacts.objects.all()
paginator = Paginator(contact_list, 25) # Show 25 contacts per page
page = request.GET.get('page') # <--- This is the key to your solution.
contact_list
是一个已分配的查询集,尚未实际评估过。对paginator = Paginator(contact_list, 25)
的{{1}}分配是懒惰的,并且在必须执行之前不会执行。
Paginator instance
从您的网址获取额外的GET变量page = request.GET.get('page')
(例如)。当我们尝试检索应在您的商家信息页面上显示的25个对象时,该网址实际上看起来像?page=2
。
这是执行数据库实际查询的地方: -
http://localhost:8000/my/listing?page=2
try:
contacts = paginator.page(page)
except PageNotAnInteger:
# If page is not an integer, deliver first page.
contacts = paginator.page(1)
执行对数据库的查询根据给定的页码仅检索有限的一组对象,条件是我们每页需要“25”个对象