68 lines
No EOL
1.9 KiB
Python
68 lines
No EOL
1.9 KiB
Python
from django.db import models
|
|
|
|
from wagtail.models import Page
|
|
from wagtail.fields import RichTextField, StreamField
|
|
from wagtail.admin.panels import FieldPanel, MultiFieldPanel
|
|
from wagtailseo.models import SeoMixin, SeoType
|
|
|
|
from blog.models import BlogPage
|
|
from .blocks import HomeContentBlock
|
|
|
|
|
|
class HomePage(SeoMixin, Page):
|
|
image = models.ForeignKey(
|
|
"wagtailimages.Image",
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.SET_NULL,
|
|
related_name="+",
|
|
help_text="Homepage image",
|
|
)
|
|
hero_text = models.CharField(
|
|
blank=True,
|
|
max_length=255, help_text="Write an introduction for the site"
|
|
)
|
|
hero_cta = models.CharField(
|
|
blank=True,
|
|
verbose_name="Hero CTA",
|
|
max_length=255,
|
|
help_text="Text to display on Call to Action",
|
|
)
|
|
hero_cta_link = models.ForeignKey(
|
|
"wagtailcore.Page",
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.SET_NULL,
|
|
related_name="+",
|
|
verbose_name="Hero CTA link",
|
|
help_text="Choose a page to link to for the Call to Action",
|
|
)
|
|
body = StreamField(
|
|
HomeContentBlock(),
|
|
blank=True,
|
|
use_json_field=True,
|
|
help_text="Write anything",
|
|
)
|
|
|
|
content_panels = Page.content_panels + [
|
|
MultiFieldPanel(
|
|
[
|
|
FieldPanel("image"),
|
|
FieldPanel("hero_text"),
|
|
FieldPanel("hero_cta"),
|
|
FieldPanel("hero_cta_link"),
|
|
],
|
|
heading="Hero section",
|
|
),
|
|
FieldPanel('body'),
|
|
]
|
|
|
|
promote_panels = SeoMixin.seo_panels
|
|
seo_content_type = SeoType.WEBSITE
|
|
|
|
def get_context(self, request, *args, **kwargs):
|
|
context = super().get_context(request)
|
|
# retrieve the last 3 blogposts
|
|
recent_blog_items = BlogPage.objects.live().order_by('-first_published_at')[:3]
|
|
context['recent_blog_items'] = recent_blog_items
|
|
return context |