我在我的應用程序中有一個頁面,列出了三篇新聞文章,頁面底部有導航按鈕可以獲取下三篇或前三篇新聞文章。Django查詢一次獲得三個對象
我想要解決這個問題,但我不想使用Django Paginator
。有什麼建議麼?
我在我的應用程序中有一個頁面,列出了三篇新聞文章,頁面底部有導航按鈕可以獲取下三篇或前三篇新聞文章。Django查詢一次獲得三個對象
我想要解決這個問題,但我不想使用Django Paginator
。有什麼建議麼?
您可以對查詢集進行切片以限制結果的數量。
article = Article.objects.all()[:3] # first three articles
article = Article.objects.all()[3:6] # second three articles
在你的網站,你會希望有一個方法來跟蹤你是哪個網頁上,這樣就可以正確地切片查詢集,並顯示鏈接上一頁和下一頁。如果你願意,你可以自己實現它,但使用Django paginator會更容易,它爲你做到了這一點。
我知道你說你不想使用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>
爲什麼Django的分頁程序不適合? – Alasdair
它適合,但是在發現paginator之前這麼久試圖做到這一點,我想好奇心已經越來越好了,而且我想知道它是否僅僅只是對象管理者。 – JBT
更容易的是使用['ListView'](https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-display/#listview),那麼你就是整個視圖代碼(包括分頁)約爲5行(最小) – Sayse