Django分页适用于第一页,不是第二页

问题描述:

我有一个搜索视图,允许用户搜索他们的记录卡,然后一次显示分页结果6。Django分页适用于第一页,不是第二页

我在所有其他视图中使用分页,并且它可以正常工作。但是,在查询中使用它时,会显示前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"),

搜索的观点是:

@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 %} 

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

  1. 你不提供q参数中的URL 2页(网址应该是这样的,而不是http://127.0.0.1:8000/search/?q=*&page=2
  2. 你应该检查出基于类的意见(ListView更精确),其中包括pagination
+0

非常感谢。我也会看看ListView。 –

+0

没有问题。基于分级的观点一开始会令人望而生畏,但你会在第一周后喜欢它们。 – orokusaki

需要包括q论点has_previous & has_next的URL,

<a class="navlink" href="?page={{ notecard_list.previous_page_number }}&q1={{ request.GET.q1 }}">previous</a> 

和,

<a class="navlink" href="?page={{ notecard_list.next_page_number }}&q1={{ request.GET.q1 }}">next</a>