Django查询一次获取三个对象
Django query to get three objects at a time
我的应用程序中有一个页面列出了三篇新闻文章,页面底部有导航按钮可以获取后三篇或前三篇新闻文章。
我正在尝试考虑可以解决该问题的查询,但我不想使用 Django Paginator
。有什么建议吗?
您可以对查询集进行切片以限制结果的数量。
article = Article.objects.all()[:3] # first three articles
article = Article.objects.all()[3:6] # second three articles
在您的站点上,您需要一种方法来跟踪您所在的页面,以便您可以正确地分割查询集,并显示指向上一页和下一页的链接。如果你愿意,你可以自己实现它,但是使用 Django 分页器会更容易,它会为你做这件事。
我知道你说过你不想为此使用 Django Paginator
,但是,如果它背后的原因是你懒得弄明白我建议再试一次,因为您描述的场景是 classic 使用 Paginator
class.
从 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>
我的应用程序中有一个页面列出了三篇新闻文章,页面底部有导航按钮可以获取后三篇或前三篇新闻文章。
我正在尝试考虑可以解决该问题的查询,但我不想使用 Django Paginator
。有什么建议吗?
您可以对查询集进行切片以限制结果的数量。
article = Article.objects.all()[:3] # first three articles
article = Article.objects.all()[3:6] # second three articles
在您的站点上,您需要一种方法来跟踪您所在的页面,以便您可以正确地分割查询集,并显示指向上一页和下一页的链接。如果你愿意,你可以自己实现它,但是使用 Django 分页器会更容易,它会为你做这件事。
我知道你说过你不想为此使用 Django Paginator
,但是,如果它背后的原因是你懒得弄明白我建议再试一次,因为您描述的场景是 classic 使用 Paginator
class.
从 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>