gpt4 book ai didi

python - Django 分页适用于第一页,不适用于第二页

转载 作者:太空狗 更新时间:2023-10-30 02:48:58 25 4
gpt4 key购买 nike

我有一个搜索 View ,允许用户搜索他们的记事卡,然后一次显示分页 6 个结果。

我在所有其他 View 中都使用了分页,并且它工作正常。但是,当它与查询一起使用时,它会显示前 6 个结果,显示“第 1 页,共 2 页”和下一个按钮,但是当您单击“下一步”时,您找不到任何结果。

我已将“*”查询设置为搜索所有,当我搜索该查询时,第一个请求调用是:

http://127.0.0.1:8000/search/?q=*

当我点击下一步时,调用是:

http://127.0.0.1:8000/search/?page=2

搜索网址是:

url(r'^search/', 'notecard.search.views.search', name="search"),

搜索 View 是:

@login_required(login_url='/auth/login/')
def search(request):
query = request.GET.get('q', '')
results = []
notecard_list = []
if query:
if query == "*":
results = Notecard.objects.filter(section__semester__user=request.user)
else:
results = Notecard.objects.filter(Q(section__semester__user=request.user), Q(notecard_body__icontains=query)|Q(notecard_name__icontains=query))
paginator = Paginator(results, 6)

try:
page = int(request.GET.get('page', '1'))
except ValueError:
page = 1

try:
notecard_list = paginator.page(page)
except (EmptyPage, InvalidPage):
notecard_list = paginator.page(paginator.num_pages)
return list_detail.object_list(
request,
queryset = Notecard.objects.filter(section__semester__user=request.user),
template_name = "notecards/search.html",
template_object_name = "results",
extra_context = {"results": results, "notecard_list": notecard_list,},
)

搜索模板是:

{% extends "base.html" %}
{% block title %} Notecard List | {% endblock %}

{% block content %}
<div id='main'>
<table id='notecards'>
<tr>
<th class="name">Search Results</th>
</tr>
</table>

<table id='known_split'>
<p>Search results:<a class="edit" href="{% url semester_list %}">Back to Semesters</a></p>
{% for result in notecard_list.object_list %}
<tr>
<td class="image">{% if result.known %}<img src="{{ STATIC_URL }}/images/known.png" width="41" height="40" />{% else %}<img src="{{ STATIC_URL }}/images/unknown.png" width="41" height="40" />{% endif %}</td>
<td class="text"><a href="{% url notecards.views.notecard_detail result.id %}">{{ result.notecard_name|truncatewords:9 }}</a></td>
</tr>
{% endfor %}
</table>

<div class="pagination">
<span class="step-links">
{% if notecard_list.has_previous %}
<a class="navlink" href="?page={{ notecard_list.previous_page_number }}">previous</a>
{% endif %}

<span class="current">
Page {{ notecard_list.number }} of {{ notecard_list.paginator.num_pages }}
</span>

{% if notecard_list.has_next %}
<a class="navlink" href="?page={{ notecard_list.next_page_number }}">next</a>
{% endif %}
</span>
</div>

{% endblock %}

正如我所说,我在所有其他 View 中成功地使用了基本相同的分页,所以我不得不相信这是由于某种查询造成的。

最佳答案

  1. 您没有在第 2 页的 URL 中提供 q 参数(URL 应该类似于 http://127.0.0.1:8000/search/?q=* &page=2 代替)
  2. 您应该查看基于类的 View (更准确地说是 ListView),其中包括 pagination

关于python - Django 分页适用于第一页,不适用于第二页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com