xxxxxxxxxx
from rest_framework.pagination import PageNumberPagination
def PersonView(request):
paginator = PageNumberPagination()
paginator.page_size = 10
qs = Person.objects.all()
result_page = paginator.paginate_queryset(qs, request)
data= PersonSerializer(result_page, many=True).data
return paginator.get_paginated_response(data)
xxxxxxxxxx
from rest_framework.response import Response
from .serializers import BlogGetSerializer
from rest_framework.views import APIView
from .models import Blog
from rest_framework.pagination import PageNumberPagination
# my blog list
class MyBlogList(APIView, PageNumberPagination):
# this will output only 5 objects per page
page_size = 5
def get(self, request):
myBlogList = Blog.objects.get()
# paginate them
results = self.paginate_queryset(myBlogList, request, view=self)
serializer = BlogGetSerializer(results, many=True)
# send paginated data
return self.get_paginated_response(serializer.data)
# API => http://127.0.0.1:8000/blog/details/2/
xxxxxxxxxx
{% if page_obj.has_previous %}
<a href="?page={{ page_obj.previous_page_number }}">« Previous page</a>
{% if page_obj.number > 3 %}
<a href="?page=1">1</a>
{% if page_obj.number > 4 %}
<span></span>
{% endif %}
{% endif %}
{% endif %}
{% for num in page_obj.paginator.page_range %}
{% if page_obj.number == num %}
<a href="?page={{ num }}">{{ num }}</a>
{% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %}
<a href="?page={{ num }}">{{ num }}</a>
{% endif %}
{% endfor %}
{% if page_obj.has_next %}
{% if page_obj.number < page_obj.paginator.num_pages|add:'-3' %}
<span></span>
<a href="?page={{ page_obj.paginator.num_pages }}">{{ page_obj.paginator.num_pages }}</a>
{% elif page_obj.number < page_obj.paginator.num_pages|add:'-2' %}
<a href="?page={{ page_obj.paginator.num_pages }}">{{ page_obj.paginator.num_pages }}</a>
{% endif %}
<a href="?page={{ page_obj.next_page_number }}">Next Page »</a>
{% endif %}
xxxxxxxxxx
# stack overflow url: https://stackoverflow.com/questions/35830779/django-rest-framework-apiview-pagination
from rest_framework.pagination import LimitOffsetPagination
class EventNewsItems(APIView, LimitOffsetPagination):
def get(self, request, pk, format=None):
event = Event.objects.get(pk=pk)
news = event.get_news_items().all()
results = self.paginate_queryset(news, request, view=self)
serializer = NewsItemSerializer(results, many=True)
return self.get_paginated_response(serializer.data)
xxxxxxxxxx
from rest_framework.pagination import LimitOffsetPagination
class ProductsPagination(LimitOffsetPagination):
default_limit = 10
max_limit = 100
class EventNewsItems(APIView):
def get(self, request, pk, format=None):
event = Event.objects.get(pk=pk)
news = event.get_news_items().all()
pagination_class = ProductsPagination
results = self.paginate_queryset(news, request, view=self)
serializer = NewsItemSerializer(results, many=True)
return self.get_paginated_response(serializer.data)
xxxxxxxxxx
from rest_framework.pagination import PageNumberPagination
def PersonView(request):
paginator = PageNumberPagination()
paginator.page_size = 10
qs = Person.objects.all()
result_page = paginator.paginate_queryset(qs, request)
data= PersonSerializer(result_page, many=True).data
return paginator.get_paginated_response(data)
xxxxxxxxxx
from django.core.paginator import Paginator
def search(request):
if 'results' in request.GET and request.GET['results']:
page = request.GET.get('page', 1)
results = request.GET['results']
word = words.objects.filter(title__icontains = results).order_by('title')
paginator = Paginator(word, 25) # Show 25 contacts per page
word = paginator.page(page)
return render_to_response('myapp/search.html',
{'word': word, 'query': results })
else:
return render(request, 'myapp/search.html')