【发布时间】:2020-07-09 13:42:20
【问题描述】:
这里的过滤工作正常,并且分页器在第一页上工作正常。问题是如果有的话,在进入下一页时。它会在下一页显示剩余数据,但如果我进入下一页,则显示 0 数据。
Paginator 仅在过滤器视图中不起作用。所以我认为问题出在这个视图中,因为我有相同的搜索和列表查询集视图模板,并且在那里分页工作正常。
编辑:我使用具有相同上下文名称的相同模板进行搜索、过滤器和列表视图,但仅在过滤器中出现了分页问题。
搜索网址如下所示
(at first) search/?q= and in the next page search/?page=2 while going previous page search/?page=1 # this works fine
在进行过滤时,我期望相同,但它不起作用。在 filter/?page=2 中没有数据。
观看次数
def get(self, request):
results = MyModel.objects.none()
parameter = request.GET.get('param', '')
today = datetime.datetime.today()
current_month = today.month
past_7_days = today - datetime.timedelta(days=7)
if parameter == '0':
return redirect('show_all_querysets')
elif parameter == '1':
results = MyModel.objects.filter(datetime__date=today.date()).order_by('-datetime')
elif parameter == '2':
results = MyModel.objects.filter(datetime__range=[past_7_days, today]).order_by('-datetime')
elif parameter == '3':
results = MyModel.objects.filter(datetime__month=current_month).order_by('-datetime')
querysets = Paginator(results, 10).get_page(request.GET.get('page'))
return render(request, 'show_all_querysets.html', {'querysets': querysets})
搜索视图
def get(self, request):
q = request.GET.get('q', '')
results = MyModel.objects.filter(message__icontains=q)).order_by('-datetime')
querysets = Paginator(results, 10).get_page(request.GET.get('page'))
return render(request, 'show_all_querysets.html', {'querysets': querysets})
模板
<div class="paginate-navigate ml-3">
{% if querysets.has_previous %}
<a href="?{% if prev_url %}{{ prev_url }}{% endif %}page={{ querysets.previous_page_number}}">
<i title="previous" class="ic-chevron-left left"></i>
</a>
{% else %}
<a disabled href="#">
<i class="ic-chevron-left left"></i>
</a>
{% endif %}
{% if querysets.has_next %}
<a href="?{% if prev_url %}{{ prev_url }}{% endif %}page={{ querysets.next_page_number}}">
<i title="next" class="ic-chevron-right right ml-2"></i>
</a>
{% else %}
<a href="#">
<i class="ic-chevron-right right ml-2"></i>
</a>
{% endif %}
</div>
【问题讨论】:
标签: django django-models django-views django-templates