So pagination isn't working even without initiating django-filters from templates, I'm not able to paginate by the number of objects I want, it's showing all of them at once
*Note: I'm not saying both should work together(pagination and django-filter), just that I wanna fix the pagination
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})
template
<div class='card'>
{% for m in filter.qs %}
<div class='year'>{{m.Year}}</div>
<div class='song_name'>{{m.song}}</div>
{% endfor %}
</div>
Firstly, you are not passing in the correct queryset. You need to pass in the filtered queryset instead of music.
music = Music.objects.all().order_by('-id')
music_filter = MusicFilter(request.GET, queryset=music)
filtered_music = music_filter.qs
paginator = Paginator(filtered_music, 6)
Then in your template you have to loop through this page_obj
in order to get your objects.
<div class='card'>
{% for m in page_obj %}
<div class='year'>{{m.Year}}</div>
<div class='song_name'>{{m.song}}</div>
{% endfor %}
</div>