Cache fragments for longer, and clear when editing page
This commit is contained in:
parent
9096bd4b0b
commit
fa85c8ba80
4 changed files with 33 additions and 3 deletions
|
@ -1,6 +1,6 @@
|
||||||
{% load wagtailcore_tags humanize_tags cache util_tags %}
|
{% load wagtailcore_tags humanize_tags cache util_tags %}
|
||||||
|
|
||||||
{% cache 600|jitter:60 "content-details" page.id request.is_preview %}
|
{% cache FRAGMENT_CACHE_TTL|jitter:FRAGMENT_CACHE_TTL_JITTER "content-details" page.id request.is_preview %}
|
||||||
<div class="content-details field is-grouped">
|
<div class="content-details field is-grouped">
|
||||||
{% if page.date %}
|
{% if page.date %}
|
||||||
<span class="icon-text">
|
<span class="icon-text">
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<div>
|
<div>
|
||||||
<h2 class="title is-3"><a href="{% pageurl page %}">{{ page.title }}</a></h2>
|
<h2 class="title is-3"><a href="{% pageurl page %}">{{ page.title }}</a></h2>
|
||||||
{% include "common/content-details.html" %}
|
{% include "common/content-details.html" %}
|
||||||
{% cache 900|jitter:60 "summary" page.id request.is_preview %}
|
{% cache FRAGMENT_CACHE_TTL|jitter:FRAGMENT_CACHE_TTL_JITTER "summary" page.id request.is_preview %}
|
||||||
<p>{{ page.summary }}</p>
|
<p>{{ page.summary }}</p>
|
||||||
{% endcache %}
|
{% endcache %}
|
||||||
</div>
|
</div>
|
||||||
|
|
23
website/common/wagtail_hooks.py
Normal file
23
website/common/wagtail_hooks.py
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
from django.core.cache import cache
|
||||||
|
from django.core.cache.utils import make_template_fragment_key
|
||||||
|
from django.http.request import HttpRequest
|
||||||
|
from wagtail import hooks
|
||||||
|
from wagtail.models import Page
|
||||||
|
|
||||||
|
from website.common.models import BasePage
|
||||||
|
|
||||||
|
FRAGMENT_CACHES = {"summary", "content-details"}
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.register("after_edit_page")
|
||||||
|
def clear_fragment_cache(request: HttpRequest, page: Page) -> None:
|
||||||
|
if not isinstance(page, BasePage):
|
||||||
|
return
|
||||||
|
|
||||||
|
cache.delete_many(
|
||||||
|
[
|
||||||
|
# Empty string is for the empty value of `request.is_preview`
|
||||||
|
make_template_fragment_key(cache_name, [page.id, False])
|
||||||
|
for cache_name in FRAGMENT_CACHES
|
||||||
|
]
|
||||||
|
)
|
|
@ -3,4 +3,11 @@ from django.http.request import HttpRequest
|
||||||
|
|
||||||
|
|
||||||
def global_vars(request: HttpRequest) -> dict:
|
def global_vars(request: HttpRequest) -> dict:
|
||||||
return {"SEO_INDEX": settings.SEO_INDEX, "DEBUG": settings.DEBUG}
|
# noop caching in preview
|
||||||
|
fragment_cache_ttl = 0 if getattr(request, "is_preview", False) else 3600
|
||||||
|
return {
|
||||||
|
"SEO_INDEX": settings.SEO_INDEX,
|
||||||
|
"DEBUG": settings.DEBUG,
|
||||||
|
"FRAGMENT_CACHE_TTL": fragment_cache_ttl,
|
||||||
|
"FRAGMENT_CACHE_TTL_JITTER": fragment_cache_ttl * 0.1,
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue