Django Paginate_by не отображает правильную пагинацию
Здравствуйте, у меня есть страница, использующая paginate_by 10, и вместо этого я получаю только 9 элементов на страницу, хотя в инспекторе элементов я вижу 10 мест в сетке, я просто могу заполнить 9 из 10, затем она переходит на следующую страницу.
Views.py
class VideoListView(generic.ListView):
model = Video
template_name = 'index.html'
context_object_name = 'video_list'
paginate_by = 10
def get_queryset(self):
return Video.objects.order_by('-date')
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
return context
Причина, по которой это происходит, заключается в том, что вы фильтруете в шаблоне, поэтому после набора запросов происходит пагинация. Фильтрация в шаблоне - не самая лучшая идея, например, потому что это сделает пагинацию неправильной, но это также неэффективно.
Вы должны фильтровать в представлении, с помощью:
class VideoListView(generic.ListView):
model = Video
queryset = Video.objects.filter(home=True).order_by('-date')
template_name = 'index.html'
context_object_name = 'video_list'
paginate_by = 10
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['category_list'] = Category.objects.all()
return context
и таким образом удалить часть {% if video.home == True %} … {% endif %}.