Django-基于搜索条件的分页



点击第2页及以上时,我在获取结果时遇到问题,很可能是由于url问题。我有一个名字列表,如果我在例如";约翰;如果名称数量>例如10。

我的看法如下:(搜索工作良好(

def name_search(request):
if 'q' in request.GET:
q=request.GET.get('q', '')
pvt_list = pvt_data.objects.filter(full_name__icontains=q)
#Pagination
p = Paginator(pvt_list, 10) # Show 10 contacts per page.
page_num = request.GET.get('page', 1)
try:
page = p.page(page_num)
except PageNotAnInteger:
page = p.page(1)
except EmptyPage:
page = p.page(1)
context = {'items' : page}
return render(request, 'home/name_search.html', context)
else:
return render(request, 'home/name_search.html')

我的urls.py文件是

urlpatterns = [
...
path('name_search', views.name_search, name='name_search'),
...
]

我的html文件是

{% for pvt in items %}
{{ pvt.full_name }}
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if items.has_previous %}
<a href="?page={{ items.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ items.number }} of {{ items.paginator.num_pages }}.
</span>
{% if items.has_next %}
<a href="?page={{ items.next_page_number }}">next</a>
{% endif %}
</span>
</div>

当我搜索时,我会得到以下链接'http://127.0.0.1:8000/name_search?q=John前10个名字都正确。

当我点击下一个按钮时,我会得到以下链接:http://127.0.0.1:8000/name_search?page=2

手动将链接更改为http://127.0.0.1:8000/name_search?q=John/page=2不起作用。。。

感谢任何回复:-(

解决方案可能是将搜索参数添加到href中。所以不是:

<a href="?page={{ items.next_page_number }}">next</a>

尝试:

<a href="?q={{ q }}&page={{ items.next_page_number }}">next</a>

您差不多完成了,还需要将查询传递到下一页/前一页。

{% for pvt in items %}
{{ pvt.full_name }}
{% endfor %}
<div class="pagination">
<span class="step-links">
{% if items.has_previous %}
<a href="?q={{ request.GET.q }}&page={{ items.previous_page_number }}">previous</a>
{% endif %}
<span class="current">
Page {{ items.number }} of {{ items.paginator.num_pages }}.
</span>
{% if items.has_next %}
<a href="?q={{ request.GET.q }}&page={{ items.next_page_number }}">next</a>
{% endif %}
</span>
</div>

最新更新