问题描述
因此,即使不从模板启动django-filters,分页也不起作用,我无法按所需对象的数量进行分页,而是一次显示所有对象
*注意:我并不是说两者都可以一起工作(分页和django-filter),只是我想解决分页
views.py
def music_page(request):
#pagination & filter
music = Music.objects.all().order_by('-id')
music_filter = MusicFilter(request.GET,queryset=music)
paginator = Paginator(music,6)
page_number = request.GET.get('page')
page_obj = paginator.get_page(page_number)
try:
music = paginator.page(page_number)
except PageNotAnInteger:
music = paginator.page(1)
except EmptyPage:
music.paginator.page(paginator.num_pages)
return render(request,template_name='main/music.html',context={'music': music,'page_obj': page_obj,'filter': music_filter})
模板
<div class='card'>
{% for m in filter.qs %}
<div class='year'>{{m.Year}}</div>
<div class='song_name'>{{m.song}}</div>
{% endfor %}
</div>
解决方法
首先,您没有传递正确的查询集。您需要传递经过过滤的查询集而不是音乐。
music = Music.objects.all().order_by('-id')
music_filter = MusicFilter(request.GET,queryset=music)
filtered_music = music_filter.qs
paginator = Paginator(filtered_music,6)
然后,您必须在模板中循环浏览page_obj
才能获取对象。
<div class='card'>
{% for m in page_obj %}
<div class='year'>{{m.Year}}</div>
<div class='song_name'>{{m.song}}</div>
{% endfor %}
</div>