Switch from custom pagination to django.core.paginator, since it can do things like counts and 'is there a next page' more easily

This commit is contained in:
Danielle McLean 2017-12-13 09:56:18 +11:00
parent 2d2159ee58
commit 2a65644813
Signed by untrusted user: 00dani
GPG key ID: 5A5D2D1AFF12EEC5
5 changed files with 26 additions and 38 deletions

View file

@ -4,6 +4,6 @@ from . import views
app_name = 'home'
urlpatterns = [
url(r'^(?:before/(?P<before>\d+))?$', views.index, name='index'),
url(r'^(?:page/(?P<page>\d+))?$', views.index, name='index'),
url(r'^robots.txt$', views.robots, name='robots.txt'),
]

View file

@ -1,6 +1,7 @@
from annoying.decorators import render_to
from django.core.paginator import Paginator
from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.shortcuts import get_object_or_404, redirect
from django.urls import reverse
from users.models import User
from urllib.parse import urljoin
@ -12,22 +13,20 @@ breadcrumbs.add('home:index', 'home')
@render_to('home/index.html')
def index(request, before=None):
def index(request, page):
query = User.objects.prefetch_related('entries', 'profiles', 'keys')
user = get_object_or_404(query, pk=1)
entries = user.entries.filter(kind__in=kinds.on_home)
if before:
entries = entries.filter(id__lt=before)
entries = entries[:10]
paginator = Paginator(user.entries.filter(kind__in=kinds.on_home), 10)
next = None
if entries:
next = reverse('home:index', kwargs={'before': entries.last().id})
# If we explicitly got /page/1 in the URL then redirect to the version with
# no page suffix.
if page == '1':
return redirect('home:index', permanent=True)
entries = paginator.page(page or 1)
return {
'user': user,
'entries': entries,
'next': next,
'atom': 'entries:atom',
'rss': 'entries:rss',
'meta': user.as_meta(request),