Django查询一次获取三个对象

时间:2016-03-07 19:26:48

标签: python django django-orm

我的应用程序中有一个页面列出了三篇新闻文章,页面底部有导航按钮,可以获得接下来的三篇或前三篇新闻文章。

我试图想出一个可以解决这个问题的查询,但我不想使用Django Paginator。有什么建议吗?

2 个答案:

答案 0 :(得分:6)

您可以对查询集进行切片以限制结果数。

article = Article.objects.all()[:3]  # first three articles

article = Article.objects.all()[3:6]  # second three articles

在您的网站上,您需要一种方法来跟踪您所在的页面,以便您可以正确切片查询集,并显示指向上一页和下一页的链接。如果你愿意,你可以自己实现它,但是使用Django分页器会更容易,这对你来说很有用。

答案 1 :(得分:1)

我知道你说你不想使用Django Paginator,但是,如果它背后的原因是你没有费心去弄清楚我建议再试一次,因为你的情景你正在描述的是Paginator类的经典用法。

pagination文档中,查看此示例:

定义您的视图功能:

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render

def listing(request):
    article_list = Articles.objects.all()
    paginator = Paginator(article_list, 3) # Show 3 articles per page

    page = request.GET.get('page')
    try:
        articles = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        articles = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        articles = paginator.page(paginator.num_pages)

    return render(request, 'list.html', {'articles': articles})

HTML表单:

{% for article in articles %}
    {# Each "article" is a Article model object. #}
    {{ article.full_name|upper }}<br />
    ...
{% endfor %}

<div class="pagination">
    <span class="step-links">
        {% if articles.has_previous %}
            <a href="?page={{ articles.previous_page_number }}">previous</a>
        {% endif %}

        <span class="current">
            Page {{ articles.number }} of {{ articles.paginator.num_pages }}.
        </span>

        {% if articles.has_next %}
            <a href="?page={{ articles.next_page_number }}">next</a>
        {% endif %}
    </span>
</div>