我正在使用 django-filter
包在我的列表视图中提供搜索功能。
现在我也想为该视图添加分页。
我正在尝试将分页与过滤查询集相结合,但我不知道如何继续。
到目前为止,我已经在 views.py
上尝试了以下操作:
def search(request):
qs = local_url.objects.filter(global_url__id=1).all()
paginator = Paginator(qs, 25)
page = request.GET.get('page')
try:
pub = paginator.page(page)
except PageNotAnInteger:
pub = paginator.page(1)
except EmptyPage:
pub = paginator.page(paginator.num_pages)
url_filter = PublicationFilter(request.GET, queryset=qs)
return render(request, 'ingester/search_list.html', {'filter': url_filter, 'publication':pub})
原文由 Anh Tuan Nguyen 发布,翻译遵循 CC BY-SA 4.0 许可协议
要使用 Django Filter 并对过滤结果进行分页,您可以执行以下操作:
在
my_project/my_app/filters.py
上:每个
FilterSet
对象都有一个.qs
包含 过滤 查询集的属性, 如果需要,您甚至可以覆盖它。我们将对我们的
MyModelFilter
的.qs
属性进行分页:在
my_project/my_app/views.py
上:你有它!
PS_1: 根据我的经验,Django 过滤器 与 Django Rest Framework 一起“玩”得更好。
PS_2: 如果您打算使用 DRF,我已经编写了一个示例,说明如何在基于函数的视图中使用分页,您可以轻松地将其与
FilterSet
结合使用: