通过多个对象分页

问题描述

因此,即使不从模板启动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>

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...