首页 > 解决方案 > 模板 Django 中未显示分页数据

问题描述

我正在从我的数据库(结合 3 个模型)向我的一个模板发送查询结果,允许用户过滤输出。显示我想要的所有信息都很好,直到我尝试对结果进行分页。然后我在下面得到空的 QuerySet 和“第 1 页,共 1 页”。它完全让我感到困惑,因为未处理的集合被提取到模板中而没有任何干扰。

这是我的views.py:

products =Product.objects.all()
out = Sets.objects.filter(
    ItemInSet__item__name__in=Product.objects.filter(metrics=1).values_list('product_name', flat=True)
).exclude(
    ItemInSet__item__name__in=Product.objects.filter(metrics=0).values_list('product_name', flat=True)
).distinct()

page = request.GET.get('page', 1)
paginator = Paginator(out, 10) # show 10 per page
try:
    out_p = paginator.page(page)
except PageNotAnInteger:
    out_p = paginator.page(1)
except EmptyPage:
    out_p = paginator.page(paginator.num_pages)

return render(request, 'item_list.html', {'products': products, 'results': out_p})

还有我的模板:

<table id="id_item_list" >
{% if results.all  %}
    {% for result in results %}
        <tr>
        <form method="GET">
            {% csrf_token %}
            <ul>
                 <a href="/result/{{result.slug}} class="list-group-item list-group-item-action">
                <h4>{{ result.name|title }}</h4>
                <!-- and few more objects from Sets and ItemInSets etc. -->
                </a>               
            </ul>
        </form>
    </tr>
    {% endfor %}
{% else %}
    <p>No Sets matched your criteria.</p>
{% endif %}
</table>
<div class="pagination">
    <span class="step-links">
    {% if results.has_previous %}
        <a href="?page=1">&laquo; first</a>
        <a href="?page={{ results.previous_page_number }}">previous</a>
    {% endif %}
    <span class="current">Page {{ results.number }} of {{results.paginator.num_pages }}.</span>
    {% if results.has_next %}
        <a href="?page={{ results.next_page_number }}">next</a>
        <a href="?page={{ results.paginator.num_pages }}">last &raquo;</a>
    {% endif %}
    </span>
    </div>
</div>

结果为空,分页仅显示' Page 1 of 1'。没有显示任何元素。当我通过 set 没有分页(out)时很好。查询多个模型是否会导致此问题?我已经看到了使用 itertools 的方法,但组合查询并不是我的直接问题。或者是吗?

编辑:按照评论中提供的说明解决了这个问题。我将分页数据视为 QuerySet,而不是 Page,这反过来又使我使用了不受支持的方法并且没有显示任何结果,这是一个过失。

标签: djangopaginationdjango-templatesdjango-viewsdjango-pagination

解决方案


推荐阅读