{{ post.title }}
{{ post.content }}
حالا بیایید ببینیم چطور صفحهبندی رو در ویو و تمپلیت پیادهسازی کنیم.
# blog/views.py
from django.core.paginator import Paginator
from django.shortcuts import render
from .models import Post
def post_list(request):
posts = Post.objects.all()
paginator = Paginator(posts, 10) # 10 پست در هر صفحه
page_number = request.GET.get('page', 1)
page = paginator.get_page(page_number)
return render(request, 'blog/list.html', {'page': page})
با CBV خیلی سادهتره! فقط paginate_by رو اضافه کنید:
# blog/views.py
from django.views.generic import ListView
from .models import Post
class PostListView(ListView):
model = Post
template_name = 'blog/list.html'
paginate_by = 10 # همین! جنگو خودش صفحهبندی میکنه
# context_object_name به طور خودکار 'page' میشه
# و در تمپلیت میتونید از page استفاده کنید
{% for post in page.object_list %}
{{ post.title }}
{{ post.content }}
{% endfor %}
{% for num in page.paginator.page_range %}
{% if page.number == num %}
{{ num }}
{% elif num > page.number|add:'-3' and num < page.number|add:'3' %}
{{ num }}
{% endif %}
{% endfor %}
paginate_by رو تنظیم کنید، جنگو به طور خودکار یک page object به context اضافه میکنه که میتونید در تمپلیت استفاده کنید.
این درس را به پایان رساندید و میتوانید به درس بعدی بروید.