Paginator ile modelimizdeki kayıtları sayfalama yapabiliyoruz. get_page() fonksiyonu artık hatala karşı daha düzenli. Koşullar ile kontrol etmeye gerek kalmıyor. Eğer istenen sayfa rakam değil ise ilk sayfaya, negatif ya da toplam sayfa sayısından büyük ise son sayfaya yönlendiriyor.
Örnek
ilkuygulamam/views.py
def kategori_makaleler(request, katslug):
makale_listesi = Makaleler.objects.filter(durum=True, kategori__slug=katslug).order_by('-kayittarihi')
son_makale_listesi = Makaleler.objects.filter(durum=True).order_by('-kayittarihi')[0:10]
kategori_listesi = Kategoriler.objects.filter(durum=True).values('baslik', 'slug').annotate(count=Count('makaleler__baslik')).filter(count__gt=0).order_by('-count', 'baslik')
kategori_detay = Kategoriler.objects.get(slug=katslug)page = request.GET.get('sayfa', 1)paginator = Paginator(makale_listesi, 6)
try:
secili_sayfaki_konular = paginator.page(page)
except PageNotAnInteger:
secili_sayfaki_konular = paginator.page(1)
except EmptyPage:
secili_sayfaki_konular = paginator.page(paginator.num_pages)
return render(request, 'katdetay.html', {'son_makale_listesi': son_makale_listesi, 'makale_listesi': secili_sayfaki_konular, 'kategori_listesi': kategori_listesi, 'kategori_detay':kategori_detay})
templates/katdetay.html
{% if makale_listesi.has_other_pages %}
<div class="col-md-9 center">
<div class="pagination">
{% if makale_listesi.has_previous %}
<a href="?sayfa={{ makale_listesi.previous_page_number }}">«</a>
{% else %}
<p class="disabled"><span>x</span></p>
{% endif %}
{% for i in makale_listesi.paginator.page_range %}
{% if makale_listesi.number == i %}
<a href="?sayfa={{ i }}" class="active">{{ i }}</a>
{% else %}
<a href="?sayfa={{ i }}">{{ i }}</a>
{% endif %}
{% endfor %}
{% if makale_listesi.has_next %}
<a href="?sayfa={{ makale_listesi.next_page_number }}">»</a>
{% else %}
<p class="disabled"><span>x</span></p>
{% endif %}
</div>
</div>
{% endif %}
Django
hakkında diğer konular