我正在使用django-filter输出我模型的过滤结果。那里没有问题。 下一步是添加分页器。尽管现在已经挣扎了几天。
views.py:
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请求有问题吗?
谢谢!
答案 0 :(得分:1)
您正在传递一个新的上下文,其中 filter 现在是一个页面,因此当使用{% for fund in filter.qs %}
时,您访问的是页面对象中不存在的字段,因此会有一个空循环。
尝试仅更改过滤器的filter.qs
。
它将解决分页问题,但是在上下文传递给render函数的过程中又出现了另一个问题。如下所示,您应该添加另一个上下文变量,以使页面显示过滤后的表单。
views.py :
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 }}