Use wagtail's new built-in cache tags
They're good, because I wrote them
This commit is contained in:
parent
48e36bc5b9
commit
518461a88f
6 changed files with 93 additions and 103 deletions
|
@ -1,26 +1,26 @@
|
||||||
{% extends "common/content_page.html" %}
|
{% extends "common/content_page.html" %}
|
||||||
|
|
||||||
{% load cache util_tags %}
|
{% load wagtail_cache %}
|
||||||
|
|
||||||
{% block post_content %}
|
{% block post_content %}
|
||||||
{{ block.super }}
|
{{ block.super }}
|
||||||
|
|
||||||
{% if not request.is_preview %}
|
{% if not request.is_preview %}
|
||||||
{% cache FRAGMENT_CACHE_TTL|jitter:FRAGMENT_CACHE_TTL_JITTER "similar-content" page.id request.is_preview %}
|
{% wagtailpagecache FRAGMENT_CACHE_TTL "similar-content" %}
|
||||||
<section class="container similar-content" id="similar-content">
|
<section class="container similar-content" id="similar-content">
|
||||||
<h2 class="subtitle is-size-2">Similar content</h2>
|
<h2 class="subtitle is-size-2">Similar content</h2>
|
||||||
|
|
||||||
<p class="view-all">
|
<p class="view-all">
|
||||||
<a href="{{ page.blog_post_list_page_url }}">View all →</a>
|
<a href="{{ page.blog_post_list_page_url }}">View all →</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
{% for page in page.get_similar_posts %}
|
{% for page in page.get_similar_posts %}
|
||||||
{% block listing_item %}
|
{% block listing_item %}
|
||||||
{% include "common/listing-item.html" %}
|
{% include "common/listing-item.html" %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
{% endcache %}
|
{% endwagtailpagecache %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load static wagtailcore_tags wagtailuserbar navbar_tags footer_tags plausible_wagtail favicon_tags sri cache %}
|
{% load static wagtailcore_tags wagtailuserbar navbar_tags footer_tags plausible_wagtail favicon_tags sri wagtail_cache %}
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en-GB">
|
<html lang="en-GB">
|
||||||
|
@ -32,31 +32,31 @@
|
||||||
<body class="{% block body_class %}{% endblock %}">
|
<body class="{% block body_class %}{% endblock %}">
|
||||||
{% wagtailuserbar %}
|
{% wagtailuserbar %}
|
||||||
|
|
||||||
{% cache 1800 "navbar" request.is_preview %}
|
{% wagtailcache 1800 "navbar" %}
|
||||||
{% navbar %}
|
{% navbar %}
|
||||||
{% endcache %}
|
{% endwagtailcache %}
|
||||||
|
|
||||||
{% block main %}
|
{% block main %}
|
||||||
<main>
|
<main>
|
||||||
{% block main_content %}{% endblock %}
|
{% block main_content %}{% endblock %}
|
||||||
</main>
|
</main>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% cache 1800 "footer" request.is_preview %}
|
{% wagtailcache 1800 "footer" %}
|
||||||
{% footer %}
|
{% footer %}
|
||||||
{% endcache %}
|
{% endwagtailcache %}
|
||||||
|
|
||||||
{# Not async to avoid bright flashes #}
|
{# Not async to avoid bright flashes #}
|
||||||
{% sri_static "js/dark-mode.js" %}
|
{% sri_static "js/dark-mode.js" %}
|
||||||
|
|
||||||
<script async defer type="text/javascript" src="{% static 'js/base.js' %}" integrity="{% sri_integrity_static 'js/base.js' %}"></script>
|
<script async defer type="text/javascript" src="{% static 'js/base.js' %}" integrity="{% sri_integrity_static 'js/base.js' %}"></script>
|
||||||
|
|
||||||
{% block extra_js %}{% endblock %}
|
{% block extra_js %}{% endblock %}
|
||||||
|
|
||||||
{% block plausible %}
|
{% block plausible %}
|
||||||
{% if not request.user.is_authenticated or not request.is_preview %}
|
{% if not request.user.is_authenticated or not request.is_preview %}
|
||||||
{% plausible %}
|
{% plausible %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -1,36 +1,36 @@
|
||||||
{% load wagtailcore_tags cache util_tags %}
|
{% load wagtailcore_tags wagtail_cache %}
|
||||||
|
|
||||||
{% cache FRAGMENT_CACHE_TTL|jitter:FRAGMENT_CACHE_TTL_JITTER "content-details" page.id request.is_preview %}
|
{% wagtailpagecache FRAGMENT_CACHE_TTL "content-details" %}
|
||||||
<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">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="far fa-lg fa-calendar-alt"></i>
|
<i class="far fa-lg fa-calendar-alt"></i>
|
||||||
</span>
|
|
||||||
<span>{{ page.date|date:"Y-m-d" }}</span>
|
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
<span>{{ page.date|date:"Y-m-d" }}</span>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% if page.show_reading_time %}
|
{% if page.show_reading_time %}
|
||||||
<div class="icon-text" {% if page.word_count %}title="{{ page.word_count }} words"{% endif %}>
|
<div class="icon-text" {% if page.word_count %}title="{{ page.word_count }} words"{% endif %}>
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<i class="far fa-lg fa-clock"></i>
|
<i class="far fa-lg fa-clock"></i>
|
||||||
</span>
|
</span>
|
||||||
<span>{{ page.reading_time_display }}</span>
|
<span>{{ page.reading_time_display }}</span>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% if page.tags.all %}
|
{% if page.tags.all %}
|
||||||
<div class="icon-text is-family-code">
|
<div class="icon-text is-family-code">
|
||||||
<span class="icon">
|
<span class="icon">
|
||||||
<a href="{{ page.tag_list_page_url }}" title="View all tags">
|
<a href="{{ page.tag_list_page_url }}" title="View all tags">
|
||||||
<i class="fas fa-lg fa-tags"></i>
|
<i class="fas fa-lg fa-tags"></i>
|
||||||
</a>
|
</a>
|
||||||
</span>
|
</span>
|
||||||
{% for tag in page.tags.all|dictsort:"slug" %}
|
{% for tag in page.tags.all|dictsort:"slug" %}
|
||||||
<span><a title="{{ tag.name }}" href="{% pageurl tag %}">#{{ tag.slug }}</a></span>
|
<span><a title="{{ tag.name }}" href="{% pageurl tag %}">#{{ tag.slug }}</a></span>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endcache %}
|
{% endwagtailpagecache %}
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
{% load wagtailcore_tags cache util_tags %}
|
{% load wagtailcore_tags wagtail_cache util_tags %}
|
||||||
|
|
||||||
{% cache FRAGMENT_CACHE_TTL|jitter:FRAGMENT_CACHE_TTL_JITTER "listing-item" page.id request.is_preview breadcrumbs %}
|
{% wagtailpagecache FRAGMENT_CACHE_TTL "listing-item" breadcrumbs %}
|
||||||
<article class="media listing-item">
|
<article class="media listing-item">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<figure class="media-left column is-3 image-column">
|
<figure class="media-left column is-3 image-column">
|
||||||
{% if page.list_image_url %}
|
{% if page.list_image_url %}
|
||||||
<a href="{% pageurl page %}" class="image" title="{{ page.title }}">
|
<a href="{% pageurl page %}" class="image" title="{{ page.title }}">
|
||||||
<img src="{{ page.list_image_url }}" alt="" loading="lazy" decoding="async" />
|
<img src="{{ page.list_image_url }}" alt="" loading="lazy" decoding="async" />
|
||||||
</a>
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</figure>
|
||||||
|
<div class="media-content column">
|
||||||
|
<div>
|
||||||
|
{% if breadcrumbs %}
|
||||||
|
{% include "common/breadcrumbs.html" with parents=page.get_parent_pages %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</figure>
|
<h2 class="title is-3">
|
||||||
<div class="media-content column">
|
<a href="{% pageurl page %}">{{ page.title }}</a>
|
||||||
<div>
|
</h2>
|
||||||
{% if breadcrumbs %}
|
{% include "common/content-details.html" %}
|
||||||
{% include "common/breadcrumbs.html" with parents=page.get_parent_pages %}
|
<p>{{ page.summary }}</p>
|
||||||
{% endif %}
|
|
||||||
<h2 class="title is-3">
|
|
||||||
<a href="{% pageurl page %}">{{ page.title }}</a>
|
|
||||||
</h2>
|
|
||||||
{% include "common/content-details.html" %}
|
|
||||||
<p>{{ page.summary }}</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</article>
|
</div>
|
||||||
{% endcache %}
|
</article>
|
||||||
|
{% endwagtailpagecache %}
|
||||||
|
|
|
@ -1,5 +1,3 @@
|
||||||
import random
|
|
||||||
|
|
||||||
from django.template import Library
|
from django.template import Library
|
||||||
from django.utils.encoding import force_str
|
from django.utils.encoding import force_str
|
||||||
from wagtail.models import Page
|
from wagtail.models import Page
|
||||||
|
@ -20,11 +18,6 @@ def pagefullurl(context: dict, page: Page) -> str:
|
||||||
return page.get_full_url(context["request"])
|
return page.get_full_url(context["request"])
|
||||||
|
|
||||||
|
|
||||||
@register.filter()
|
|
||||||
def jitter(original: float, jitter: float) -> float:
|
|
||||||
return random.uniform(original + jitter, original - jitter)
|
|
||||||
|
|
||||||
|
|
||||||
@register.filter()
|
@register.filter()
|
||||||
def extract_text(html: str | RichText) -> str:
|
def extract_text(html: str | RichText) -> str:
|
||||||
return utils.extract_text(force_str(html))
|
return utils.extract_text(force_str(html))
|
||||||
|
|
|
@ -3,12 +3,9 @@ from django.http.request import HttpRequest
|
||||||
|
|
||||||
|
|
||||||
def global_vars(request: HttpRequest) -> dict:
|
def global_vars(request: HttpRequest) -> dict:
|
||||||
# noop caching in preview
|
|
||||||
fragment_cache_ttl = 0 if getattr(request, "is_preview", False) else 3600
|
|
||||||
return {
|
return {
|
||||||
"SEO_INDEX": settings.SEO_INDEX,
|
"SEO_INDEX": settings.SEO_INDEX,
|
||||||
"DEBUG": settings.DEBUG,
|
"DEBUG": settings.DEBUG,
|
||||||
"FRAGMENT_CACHE_TTL": fragment_cache_ttl,
|
"FRAGMENT_CACHE_TTL": 3600,
|
||||||
"FRAGMENT_CACHE_TTL_JITTER": fragment_cache_ttl * 0.1,
|
|
||||||
"ACTIVITYPUB_HOST": settings.ACTIVITYPUB_HOST,
|
"ACTIVITYPUB_HOST": settings.ACTIVITYPUB_HOST,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue