Django Filter - Paginate结果

问题描述 投票:1回答:1

我正在使用django-filter输出我模型的过滤结果。没问题。下一步是添加一个paginator ..虽然现在苦苦挣扎了几天。

views.朋友:

def funds_overview(request):
 f = FundFilter(request.GET, queryset=Fund.objects.all()).qs
 paginator = Paginator(f, 5)
 page = request.GET.get('page')
 funds = paginator.get_page(page)
 return render(request, 'funds/funds.html', {'filter': funds})

funds.html:

<form method="get">
<div class="well">
 <h4 style="margin-top: 0">Search Criteria</h4>

  <div class="row">
   <div class="form-group col-sm-4 col-md-3">
    {{ filter.form.fund_name.label_tag }}
    {% render_field filter.form.fund_name class="form-control" %}
   </div>
  </div>

<button type="submit" class="btn btn-primary">
  <span class="glyphicon glyphicon-search"></span> Search
</button>

{% for fund in filter.qs %}
<p>{{fund.name}} </p>

{% empty %}

No funds match your search criteria

{% endfor %}

浏览器中的结果“没有资金符合您的搜索条件”这一行。

有人可以帮忙吗?我假设两次调用GET请求有问题吗?

谢谢 !

django pagination django-filter django-pagination
1个回答
1
投票

你正在传递一个新的上下文,其中filter现在是一个页面,所以当你使用{% for fund in filter.qs %}访问一个页面对象中不存在的字段时,所以会有一个空循环。

尝试更改filter.qs只是过滤器。

它将解决分页问题,​​但是还有另一个问题出现在传递给render函数的上下文中。如下所示,您应该添加另一个上下文变量,以使您的页面显示已过滤的表单。

views.朋友:

def funds_overview(request):
 funds = FundFilter(request.GET, queryset=Fund.objects.all()).qs
 paginator = Paginator(f, 5)
 page = request.GET.get('page')
 fund_page = paginator.get_page(page)
 return render(request, 'funds/funds.html', {'filter': funds, 'page': fund_page})

funds.html:

<form method="get">
<div class="well">
 <h4 style="margin-top: 0">Search Criteria</h4>

  <div class="row">
   <div class="form-group col-sm-4 col-md-3">
    {{ filter.form.fund_name.label_tag }}
    {% render_field filter.form.fund_name class="form-control" %}
   </div>
  </div>

<button type="submit" class="btn btn-primary">
  <span class="glyphicon glyphicon-search"></span> Search
</button>

{% for fund in page %}
<p>{{fund.name}} </p>

{% empty %}

No funds match your search criteria

{% endfor %}
Page {{ page.number }} of {{ page.paginator.num_pages }}
© www.soinside.com 2019 - 2024. All rights reserved.