Пагинатор не работает должным образом при фильтрации наборов запросов? - PullRequest
0 голосов
/ 09 июля 2020

Здесь отлично работает фильтрация и пагинатор на первой странице тоже работает нормально. Проблема возникает при переходе на следующую страницу, если она есть. На следующей странице отображаются оставшиеся данные, но если I go на следующей странице, то отображается 0.

Paginator не работает в только просмотр фильтра. Поэтому я думаю, что проблема в этом представлении только потому, что у меня один и тот же шаблон для просмотра набора запросов и списков, и там разбивка на страницы работает нормально.

EDIT: Я использую тот же шаблон с тем же именем контекста для поиска, фильтра и просмотра списка, но только в фильтре возникла проблема с разбивкой на страницы.

URL-адрес поиска выглядит следующим образом

 (at first)  search/?q= and in the next page search/?page=2 while going previous page search/?page=1 # this works fine

При выполнении фильтра я ожидаю того же, но это не работает. В фильтре /? Page = 2 нет данных.

просмотров

def get(self, request):
    results = MyModel.objects.none()
    parameter = request.GET.get('param', '')
    today = datetime.datetime.today()
    current_month = today.month
    past_7_days = today - datetime.timedelta(days=7)
    if parameter == '0':
        return redirect('show_all_querysets')
    elif parameter == '1':
        results = MyModel.objects.filter(datetime__date=today.date()).order_by('-datetime')
    elif parameter == '2':
        results = MyModel.objects.filter(datetime__range=[past_7_days, today]).order_by('-datetime')
    elif parameter == '3':
        results = MyModel.objects.filter(datetime__month=current_month).order_by('-datetime')
    querysets = Paginator(results, 10).get_page(request.GET.get('page'))
    return render(request, 'show_all_querysets.html', {'querysets': querysets})

Search View

 def get(self, request):
        q = request.GET.get('q', '')
        results = MyModel.objects.filter(message__icontains=q)).order_by('-datetime')
        querysets = Paginator(results, 10).get_page(request.GET.get('page'))
        return render(request, 'show_all_querysets.html', {'querysets': querysets})

template

 <div class="paginate-navigate ml-3">
                 {% if querysets.has_previous %}
                <a href="?{% if prev_url %}{{ prev_url }}{% endif %}page={{ querysets.previous_page_number}}">
                    <i title="previous" class="ic-chevron-left left"></i>
                </a>
                {% else %}
                <a disabled href="#">
                    <i class="ic-chevron-left left"></i>
                </a>
                {% endif %}

                {% if querysets.has_next %}
                <a href="?{% if prev_url %}{{ prev_url }}{% endif %}page={{ querysets.next_page_number}}">
                    <i title="next" class="ic-chevron-right right ml-2"></i>
                </a>
                {% else %}
                <a href="#">
                    <i class="ic-chevron-right right ml-2"></i>
                </a>
                {% endif %}

            </div>

Ответы [ 2 ]

0 голосов
/ 09 июля 2020

Если в параметрах запроса есть как поисковый файл, так и разбиение на страницы, тогда ваш URL-адрес выглядит как your_url/?params=some&page=2

, чтобы достичь этого первого прохода params в context

return render(request, 'show_all_querysets.html', {'querysets': querysets,'parameter':parameter})

а затем предположим, что у вас есть предыдущая и следующая кнопки, поэтому задайте href следующим образом:

{% if querysets.has_previous %}
<a class="btn btn-outline-dark" href="{% if parameter %}{{ request.get_full_path }}&page={{ querysets.previous_page_number }}{% else %}?page={{ querysets.previous_page_number }}{% endif %}">Previous</a>
{% else %}
<button type="button" disabled class="btn btn-outline-dark" title = "No querysets available">Previous</button>
{% endif %}
{% if querysets.has_next %}
<a class="btn btn-outline-dark" href="{% if parameter %}{{ request.get_full_path }}&page={{ querysets.next_page_number }}{% else %}?page={{ querysets.next_page_number }}{% endif %}">Next</a>
{% else %}
<button disabled type="button" class="btn btn-outline-dark" title = "No querysets available">Next</button>
{% endif %}
0 голосов
/ 09 июля 2020
querysets = Paginator(results, 10).page(request.GET.get('page'))
...