#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>