我一直在使用django-filter app来过滤模型。当我尝试使用Django的paginator时,从过滤后的查询中分页,它不起作用。虽然页码位于底部,但所有结果都放在一页上。当我点击不同的页码时,结果在放到一个页面时未经过滤。
有没有人知道这方面的解决方案?
from .models import Video
from django.shortcuts import render
from .filters import VideoFilter
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def search(request):
video_list = Video.objects.all()
video_filter = VideoFilter(request.POST, queryset=video_list)
paginator = Paginator(video_filter.qs, 1)
page = request.GET.get('page')
try:
videos = paginator.page(page)
except PageNotAnInteger:
videos = paginator.page(1)
except EmptyPage:
videos = paginator.page(paginator.num_pages)
return render(request, 'search/user_list.html', {'filter': video_filter,'videos':videos})
{% extends 'base.html' %}
{% block content %}
<form method="post">{% csrf_token %}
{{ filter.form.as_p }}
<button type="submit">Search</button>
</form>
<ul>
{% for video in filter.qs %}
<li>{{ video.title }}</li>
{% endfor %}
</ul>
{% if videos.has_other_pages %}
<ul class="pagination">
{% if videos.has_previous %}
<li><a href="?page={{ videos.previous_page_number }}">«</a></li>
{% else %}
<li class="disabled"><span>«</span></li>
{% endif %}
{% for i in videos.paginator.page_range %}
{% if videos.number == i %}
<li class="active"><span>{{ i }} <span class="sr-only">(current)</span></span></li>
{% else %}
<li><a href="?page={{ i }}">{{ i }}</a></li>
{% endif %}
{% endfor %}
{% if videos.has_next %}
<li><a href="?page={{ videos.next_page_number }}">»</a></li>
{% else %}
<li class="disabled"><span>»</span></li>
{% endif %}
</ul>
{% endif %}
{% endblock %}
答案 0 :(得分:0)
您需要遍历分页器的object_list
而不是过滤器的.qs
属性。
{% for video in videos.object_list %}
<li>{{ video.title }}</li>
{% endfor %}