Django нумерация страниц не работает на моей странице результатов поиска - PullRequest
0 голосов
/ 08 апреля 2019

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

My view.py is:

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>

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

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

1 Ответ

1 голос
/ 08 апреля 2019

В вашем шаблоне вы перебираете '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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...