python - 按多个对象分页django
问题描述
因此,即使没有从模板启动 django-filters,分页也无法正常工作,我无法按我想要的对象数量进行分页,它会同时显示所有对象
*注意:我并不是说两者应该一起工作(分页和 django-filter),只是我想修复分页
视图.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>
推荐阅读
- docker - 如何在许可下部署 docker 容器
- javascript - 尽管在节点 js 发布请求中提供了正确的 API 密钥,但无法接收响应
- python - 使用 Juniper 执行的 Paramiko 回显命令
- c++ - 当比较相等时,具有(几乎)相同值的两个字符串返回 0 或 1(它们的区别是 '\0' 字符)
- reactjs - .tsx 文件无法解析另一个 .ts 文件
- c++ - 为 CEGUI 解析 Windows 10 中的 GLM 路径
- yocto - GNU Hello World 的 do_compile 在简单的 yocto 配方中失败
- android - 通过谷歌助手实现安卓应用操作的问题
- python - TypeError: hash must be unicode or bytes, not flask_sqlalchemy.BaseQuery
- c - C中的选择排序未显示正确的输出