問題

我有一個template,其中使用者傳遞查詢並選擇幾個複選框(這些可能範圍為1-100).然後,我的view執行以下操作:

 def search(request):
    results_list = search(request.GET.get("q", ""), request.GET.getlist("c"))

    # Pagination
    paginator = Paginator(results_list, 10)
    page = request.GET.get("page")
    results = paginator.get_page(page)

    return render(
        request,
        "web/search/show.html",
        {
            "query": query,
            "results": results,
        },
    )
 

問題aroup是因為搜尋和顯示結果都發生在同一頁面上.因此,當我想包含分頁時,我必須在我的模板中執行以下操作:

 <div class="pagination">
    <div class="step-links">
        {% if results.has_previous %}
        <a href="?page={{ results.previous_page_number }}&{{request.GET.urlencode}}" class="prev-page-link">Previous</a>
        {% endif %}

        {% if results %}
        <span class="current">
            Page {{ results.number }} of {{ results.paginator.num_pages }}
        </span>
        {% endif %}

        {% if results.has_next %}
        <a href="?page={{ results.next_page_number }}&{{request.GET.urlencode}}" class="next-page-link">Next</a>
        {% endif %}
    </div>
</div>
 

請考慮使用request.GET.urlencode,因為當用戶想要轉到前一頁或下一頁時,需要傳遞相同的querycheckboxes.但是,當用戶超過第二頁時,這會建立一個錯誤,因為?page=3&page=2繼續堆積.有人能指出我正確的方向來解決這個問題嗎?

  最佳答案

一個簡單的解決方案是重複連結中需要處理的每個GET引數,而不是使用完整的查詢字串,例如:

 <a href="?page={{ results.next_page_number }}&q={{request.GET.q|urlencode}}&c={{request.GET.c|urlencode}}" class="next-page-link">Next</a>
 

一個更優雅的解決方案是建立一個Django模板標記,根據查詢字串的當前狀態構建URL,類似於本文中描述的內容:處理QueryString Parameters .

  相同標籤的其他問題

pythondjangodjango-views