Разбиение на страницы Django не работало на моей странице результатов поиска

Я только что попытался добавить пагинатор для своей страницы результатов поиска, но это не сработало. У меня 10 статей в результатах поиска и я ставлю по 3 на каждую страницу, что означает, что всего список результатов будет разбит на 4 страницы. Однако, когда я искал ключевые слова, он показывал все 10 статей на одной странице, и пагинатор не работал.

Мой view.py:

def search_titles(request):
q = request.GET.get('q')
error_msg = ''

if not q:
    error_msg = 'Please enter keywords!'
    return render(request, 'search_results.html', {'error_msg': error_msg})
else:
    nq = q.split(' ')
    a_list = Q(article_ti__icontains=nq[0]) | Q(article_content__icontains=nq[0]) | Q(
        abstract__icontains=nq[0]) | Q(
        author__icontains=nq[0])
    for i in nq[1:]:
        a_list.add(Q(article_ti__icontains=i) | Q(article_content__icontains=i) | Q(abstract__icontains=i) | Q(author__icontains=i), a_list.connector)
    queryset = Article.objects.filter(a_list).distinct()
    queryset_count = queryset.count()

    paginator = Paginator(queryset, 3)
    page_var = 'page'
    page = request.GET.get(page_var, 1)
    try:
        sets = paginator.page(page)
    except PageNotAnInteger:
        sets = paginator.page(1)
    except EmptyPage:
        sets = paginator.page(paginator.num_pages)

return render(request, 'search_results.html', {'error_msg': error_msg, 'b_list': queryset, 'a_list_count': queryset_count, 'sets': sets, 'page_var':page_var})

мой код HTML:

<div class = "ui text container">
    {% if error_msg %}
        <p>{{ error_msg }}</p>
    {% else %}
        {% for a in b_list %}
            <div class = "ui segment">
                <a  target = "_blank" href = {{ a.get_abs_url }}>
                    <h3>{{ a.article_ti }}</h3>
                    <h5>{{ a.author }}</h5>
                    <p>{{ a.abstract }}</p>
                </a>
            </div>
    {% empty %}
        <div class = "ui segment">No results for '{{ request.GET.q }}'</div>
    {% endfor %}
    {% endif %}
</div>

<div class = "pagination" id = "m">
<span class = "step-links">
    {% if sets.has_previous %}
        <a href = "?{{ page_var }}=1&q = {{ request.GET.q }}" title = "First"><<</a>
        <a href = "?{{ page_var }} = {{ sets.previous_page_number }}&q = {{ request.GET.q }}" title = "Previous"><</a>
    {% endif %}

    <span class = "current"><input name = "enter_page" value = "{{ sets.number }}" id = "page_num"> of {{ sets.paginator.num_pages }}</span>

    {% if sets.has_next %}
        <a href = "?{{ page_var }} = {{ sets.next_page_number }}&q = {{ request.GET.q }}" title = "Next">></a>
        <a href = "?{{ page_var }} = {{ sets.paginator.num_pages }}&q = {{ request.GET.q }}" title = "Last">>></a>
    {% endif %}
</span>
</div>

Я попробовал несколько методов в stackoverflow, но все равно не работает. Может ли кто-нибудь дать мне несколько предложений?

Я буду очень признателен, если вы можете мне помочь!

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
99
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем шаблоне вы перебираете "b_list",

{% for a in b_list %}
        <div class = "ui segment">
            <a  target = "_blank" href = {{ a.get_abs_url }}>
                <h3>{{ a.article_ti }}</h3>
                <h5>{{ a.author }}</h5>
                <p>{{ a.abstract }}</p>
            </a>
        </div>
{% empty %}
    <div class = "ui segment">No results for '{{ request.GET.q }}'</div>
{% endfor %}

изменить это на,

{% for a in sets %}
        <div class = "ui segment">
            <a  target = "_blank" href = {{ a.get_abs_url }}>
                <h3>{{ a.article_ti }}</h3>
                <h5>{{ a.author }}</h5>
                <p>{{ a.abstract }}</p>
            </a>
        </div>
{% empty %}
    <div class = "ui segment">No results for '{{ request.GET.q }}'</div>
{% endfor %}

Другие вопросы по теме