website/website/home/models.py

64 lines
1.9 KiB
Python
Raw Normal View History

2022-10-21 13:20:22 +01:00
from typing import Optional, Tuple
2022-06-12 21:08:11 +01:00
from django.db import models
2022-07-25 20:02:54 +01:00
from django.http.request import HttpRequest
2022-10-21 13:20:22 +01:00
from django_cache_decorator import django_cache_decorator
2022-06-12 21:08:11 +01:00
from wagtail.admin.panels import FieldPanel
from wagtail.images import get_image_model_string
2022-08-19 16:56:20 +01:00
from wagtail.images.models import Image
from wagtailmetadata.models import WagtailImageMetadataMixin
2022-06-12 21:08:11 +01:00
from website.common.models import BasePage
from website.contrib.singleton_page.utils import SingletonPageCache
2022-06-09 08:36:29 +01:00
2022-06-12 15:17:28 +01:00
@django_cache_decorator(time=600)
2022-10-21 13:20:22 +01:00
def get_latest_blog_post() -> Optional[Tuple[str, str]]:
from website.blog.models import BlogPostPage
try:
latest_blog_post = (
BlogPostPage.objects.live().public().defer_streamfields().latest("date")
)
except BlogPostPage.DoesNotExist:
return None
return latest_blog_post.title, latest_blog_post.get_url()
2022-08-19 16:56:20 +01:00
class HomePage(BasePage, WagtailImageMetadataMixin):
2022-06-14 20:57:50 +01:00
max_count = 1
2022-06-12 21:08:11 +01:00
heading = models.CharField(max_length=128, blank=True)
image = models.ForeignKey(
get_image_model_string(), null=True, on_delete=models.SET_NULL
)
2022-06-12 21:08:11 +01:00
content_panels = BasePage.content_panels + [
FieldPanel("heading"),
FieldPanel("image"),
]
2022-07-25 20:02:54 +01:00
2022-08-19 16:56:20 +01:00
def get_meta_url(self) -> str:
return self.full_url
def get_meta_image(self) -> Image | None:
return self.image
def get_meta_title(self) -> str:
return self.seo_title or self.title
def get_meta_description(self) -> str:
return self.search_description
def get_object_title(self) -> str:
return self.html_title
2022-08-19 16:56:20 +01:00
2022-07-25 20:02:54 +01:00
def get_context(self, request: HttpRequest) -> dict:
from website.search.models import SearchPage
2022-07-25 20:02:54 +01:00
context = super().get_context(request)
2022-10-21 13:20:22 +01:00
context["latest_blog_post"] = get_latest_blog_post()
context["search_page_url"] = SingletonPageCache.get_url(SearchPage, request)
2022-07-25 20:02:54 +01:00
return context