天天看點

django 1.97 paginator實作分頁功能

網上搜的攻略有問題,碾轉了好幾個教程,最後得到完善的。以下是總結的教程,希望大家少走彎路。

 首先聲明 1.97版本不需要在setting.py裡設定任何東西。   直接可以導入分頁paginato .而以前的版本好像還需要導入配置。 我耗費了大量的時間在配置上,最後卻不需要配置。此處大誤。 

資料庫

#新聞
class New(models.Model):
    title = models.CharField(u'标題', max_length=256)
    content = models.TextField(u'内容')

    pub_date = models.DateTimeField(u'發表時間', auto_now_add=True, editable = True)
    update_time = models.DateTimeField(u'更新時間',auto_now=True, null=True)

    def __unicode__(self):
        return self.title      

視圖

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render      
def new(request):
    blogs = New.objects.all()
    paginator = Paginator(blogs, 5)  # 每頁顯示資料條數

    page = request.GET.get('page')
    try:
        blogs = paginator.page(page)
    except PageNotAnInteger:
        # If page is not an integer, deliver first page.
        blogs = paginator.page(1)
    except EmptyPage:
        # If page is out of range (e.g. 9999), deliver last page of results.
        blogs = paginator.page(paginator.num_pages)
    return render(request, 'new.html', {'blogs': blogs})      
return render(request, 'product.html', {'contacts': contacts})

前端  

{% for blog in blogs %}

    <div>
        {{blog.title}}
        {{blog.content|truncatechars:100}}
        </div>
{% endfor %}

<div class="pagination">
{% if blogs.has_previous %}
        <a class='paginator' title='上一頁' href='?page={{ blogs.previous_page_number }}'><span>&lt;&lt;</span></a>
 {% endif %}
 {% for page in blogs.paginator.page_range %}
     {% if page = blogs.number %}
         <a class='paginator_current' title='目前頁:{{ page }}'><span>{{ page }}</span></a>
     {% else %}
         <a class='paginator' href='?page={{ page }}' title='{{ page }}'><span>{{ page }}</span></a>
     {% endif %}
 {% endfor %}
 {% if blogs.has_next %}
     <a class='paginator' title='下一頁' href='?page={{ blogs.next_page_number }}'><span>&gt;&gt;</span></a>
 {% endif %}
</div>      

最後  實作效果。