django - Django - 基于搜索条件的分页
问题描述
单击第 2 页及以上页面时,我在获取结果时遇到问题 - 很可能是由于 url 问题。我有一个名称列表,如果我搜索例如“John”,如果名称数量 > 例如 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>
推荐阅读
- bitbucket - 如何为四人组免费创建 bitbucket 帐户
- java - 从 netty 服务器读取时,不同的响应消息正在合并
- python - 在没有 text.file 的程序关闭后,如何将用户数据保存在列表中?
- dialogflow-es - 格式错误的响应:由于语音响应为空,无法将 Dialogflow 响应解析为 AppResponse
- web2py - web2py的routes.py中routes_out字典的目的是什么?
- php - 在 index.php 中渲染另一个布局
- keras - 如何使用 LSTM 进行文本分类
- oracle - 使用 oracle 数据库对 Spring Boot 应用程序进行 Dockerizing
- ios - 如何在条形顶部显示条形值?
- java - 要打印的数组的非相邻元素的最大总和