【问题标题】:Django - pagination based on search criteriaDjango - 基于搜索条件的分页
【发布时间】:2021-07-27 18:06:11
【问题描述】:

我在点击第 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 不工作...

感谢任何回应:-)

【问题讨论】:

    标签: django django-models django-views django-pagination


    【解决方案1】:

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

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

    尝试:

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

    【讨论】:

      【解决方案2】:

      您快到了,您还需要将查询传递到下一页/上一页。

      {% 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>
      

      【讨论】:

      • 也工作得很好 - 似乎只是在最后错过了''。
      猜你喜欢
      • 2014-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-22
      • 2011-01-03
      • 2012-04-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多