Cache latest blog post
This commit is contained in:
parent
35579a8803
commit
214f10002c
4 changed files with 33 additions and 10 deletions
14
poetry.lock
generated
14
poetry.lock
generated
|
@ -396,6 +396,14 @@ python-versions = ">=3.6"
|
|||
[package.dependencies]
|
||||
Django = ">=2.2"
|
||||
|
||||
[[package]]
|
||||
name = "django3-cache-decorator"
|
||||
version = "0.5.2"
|
||||
description = "Easily add caching to functions within a django project."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
|
||||
[[package]]
|
||||
name = "djangorestframework"
|
||||
version = "3.13.1"
|
||||
|
@ -1461,7 +1469,7 @@ testing = ["func-timeout", "jaraco.itertools", "pytest (>=6)", "pytest-black (>=
|
|||
[metadata]
|
||||
lock-version = "1.1"
|
||||
python-versions = "^3.10"
|
||||
content-hash = "ebe98ffb0ca3eecc013a5d4ff58665bdbba2806da83d08ccb3acdbf03bda39b0"
|
||||
content-hash = "78d386497d4f46ead5da6c395a16ce50d9f9846cb20bf39bf2932bf5db5d4316"
|
||||
|
||||
[metadata.files]
|
||||
anyascii = [
|
||||
|
@ -1721,6 +1729,10 @@ django-treebeard = [
|
|||
{file = "django-treebeard-4.5.1.tar.gz", hash = "sha256:80150017725239702054e5fa64dc66e383dc13ac262c8d47ee5a82cb005969da"},
|
||||
{file = "django_treebeard-4.5.1-py3-none-any.whl", hash = "sha256:7c2b1cdb1e9b46d595825186064a1228bc4d00dbbc186db5b0b9412357fba91c"},
|
||||
]
|
||||
django3-cache-decorator = [
|
||||
{file = "django3-cache-decorator-0.5.2.tar.gz", hash = "sha256:d41409aa18c5bd1a99d48632373336d9787cb94025807ff3161804044a9f8abe"},
|
||||
{file = "django3_cache_decorator-0.5.2-py3-none-any.whl", hash = "sha256:c8dc082bad6fa0598b5c26b30b15062aff5072ce649202fb82db2b49bfa454b3"},
|
||||
]
|
||||
djangorestframework = [
|
||||
{file = "djangorestframework-3.13.1-py3-none-any.whl", hash = "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa"},
|
||||
{file = "djangorestframework-3.13.1.tar.gz", hash = "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee"},
|
||||
|
|
|
@ -34,6 +34,7 @@ wagtail-2fa = "1.6.0"
|
|||
django-health-check = "3.17.0"
|
||||
wagtail-autocomplete = {git = "https://github.com/wagtail/wagtail-autocomplete", rev = "03f46a0c256989690d0a43fc21fe0f37f9ede765"}
|
||||
Wand = "^0.6.10"
|
||||
django3-cache-decorator = "^0.5.2"
|
||||
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
from typing import Optional, Tuple
|
||||
|
||||
from django.db import models
|
||||
from django.http.request import HttpRequest
|
||||
from django_cache_decorator import django_cache_decorator
|
||||
from wagtail.admin.panels import FieldPanel
|
||||
from wagtail.images import get_image_model_string
|
||||
from wagtail.images.models import Image
|
||||
|
@ -9,6 +12,20 @@ from website.common.models import BasePage
|
|||
from website.contrib.singleton_page.utils import SingletonPageCache
|
||||
|
||||
|
||||
@django_cache_decorator(time=21600)
|
||||
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()
|
||||
|
||||
|
||||
class HomePage(BasePage, WagtailImageMetadataMixin):
|
||||
max_count = 1
|
||||
|
||||
|
@ -38,16 +55,9 @@ class HomePage(BasePage, WagtailImageMetadataMixin):
|
|||
return ""
|
||||
|
||||
def get_context(self, request: HttpRequest) -> dict:
|
||||
from website.blog.models import BlogPostPage
|
||||
from website.search.models import SearchPage
|
||||
|
||||
context = super().get_context(request)
|
||||
context["latest_blog_post"] = (
|
||||
BlogPostPage.objects.live()
|
||||
.public()
|
||||
.defer_streamfields()
|
||||
.order_by("-date")
|
||||
.first()
|
||||
)
|
||||
context["latest_blog_post"] = get_latest_blog_post()
|
||||
context["search_page_url"] = SingletonPageCache.get_url(SearchPage, request)
|
||||
return context
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
{% if latest_blog_post %}
|
||||
<div class="box latest">
|
||||
<strong>Latest Post</strong>:
|
||||
<a href="{% pageurl latest_blog_post %}">{{ latest_blog_post.title }}</a>
|
||||
<a href="{{ latest_blog_post.1 }}">{{ latest_blog_post.0 }}</a>
|
||||
→
|
||||
</div>
|
||||
{% endif %}
|
||||
|
|
Loading…
Reference in a new issue