【问题标题】:Django pagination didn't work in my search results pageDjango 分页在我的搜索结果页面中不起作用
【发布时间】:2023-03-10 01:48:02
【问题描述】:

我刚刚尝试为我的搜索结果页面添加分页器,但没有成功。我在搜索结果中有 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 上尝试了几种方法,但仍然没有工作。谁能给我一些建议?

如果你能帮助我,我将不胜感激!

【问题讨论】:

    标签: html django pagination


    【解决方案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 %}
    

    【讨论】:

      猜你喜欢
      • 2021-08-04
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多