Newer
Older
from django.conf import settings
from django.core.paginator import EmptyPage, PageNotAnInteger, Paginator
from django.db.models.functions import Coalesce
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
from wagtail.wagtailadmin.edit_handlers import (
FieldPanel,
PageChooserPanel,
StreamFieldPanel,
)
from wagtail.wagtailcore.fields import StreamField
from opentech.utils.blocks import StoryBlock
from opentech.utils.models import BasePage
class FundPage(BasePage):
subpage_types = []
parent_page_types = ['FundIndex']
introduction = models.TextField(blank=True)
fund_type = models.ForeignKey(
'wagtailcore.Page',
on_delete=models.SET_NULL,
related_name='+',
)
body = StreamField(StoryBlock())
content_panels = BasePage.content_panels + [
FieldPanel('introduction'),
PageChooserPanel('fund_type', 'apply.FundType'),
StreamFieldPanel('body'),
]
class NewsIndex(BasePage):
subpage_types = ['FundPage']
parent_page_types = ['home.HomePage']
def get_context(self, request, *args, **kwargs):
funds = FundPage.objects.live().public().descendant_of(self).annotate(
date=Coalesce('publication_date', 'first_published_at')
).order_by('-date')
# Pagination
page = request.GET.get('page', 1)
paginator = Paginator(funds, settings.DEFAULT_PER_PAGE)
try:
news = paginator.page(page)
except PageNotAnInteger:
news = paginator.page(1)
except EmptyPage:
news = paginator.page(paginator.num_pages)
context = super().get_context(request, *args, **kwargs)
context.update(news=news)
return context