Нумерация страниц, когда поиск и результаты находятся на одной странице - PullRequest
1 голос
/ 26 октября 2019

У меня есть template, где пользователи передают запрос и выбирают пару флажков (они могут варьироваться от 1 до 100). Затем my 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,
        },
    )

Проблема возникает из-за того, что поиск и представление результатов происходят на одной странице. Поэтому, когда я хочу включить нумерацию страниц в свой шаблон, я должен сделать следующее:

<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, потому что когда пользователь хочет перейти к предыдущему или следующемустраница же query и checkboxes должны быть пропущены. Тем не менее, это создает ошибку, когда пользователь проходит мимо второй страницы, потому что ?page=3&page=2 продолжает накапливаться. Может кто-нибудь указать мне правильное направление для решения этой проблемы?

1 Ответ

1 голос
/ 27 октября 2019

Простым решением было бы повторить каждый параметр 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 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...