разбиение на страницы по количеству объектов django

#python #django #django-filter #django-pagination

#python #django #django-фильтр #django-разбивка на страницы

Вопрос:

Таким образом, разбивка на страницы не работает даже без инициализации django-фильтров из шаблонов, я не могу разбивать страницы по количеству объектов, которые я хочу, он показывает их все сразу

* Примечание: я не говорю, что оба должны работать вместе (разбивка на страницы и django-filter), просто я хочу исправить разбивку на страницы

views.py

 def music_page(request):

    #pagination amp; 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>
  

Ответ №1:

Во-первых, вы не передаете правильный набор запросов. Вам нужно передать отфильтрованный набор запросов вместо музыки.

 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>