问题描述
我在点击第 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>