python 17 lines · 4 steps

Busting template fragment caches in Django

A signal receiver clears cached template fragments whenever an Article is saved or deleted.

Explained by highlit
1from django.core.cache import cache
2from django.core.cache.utils import make_template_fragment_key
3from django.db.models.signals import post_save, post_delete
4from django.dispatch import receiver
5 
6from .models import Article
7 
8 
9@receiver(post_save, sender=Article)
10@receiver(post_delete, sender=Article)
11def invalidate_article_fragments(sender, instance, **kwargs):
12 keys = [
13 make_template_fragment_key("article_detail", [instance.pk]),
14 make_template_fragment_key("article_sidebar", [instance.category_id]),
15 make_template_fragment_key("article_list"),
16 ]
17 cache.delete_many(keys)
01 / 01
STEP 01

Walkthrough

Space play step click any line
Three takeaways
  1. 1Signals let you react to model lifecycle events without touching every save site.
  2. 2Template fragment keys are reconstructible from the same arguments used in the template, so you can target exactly what to invalidate.
  3. 3Deleting stale cache entries on write keeps cached HTML consistent with the database.

Related explainers

Share this explainer

Here's the card — post it anywhere.

Busting template fragment caches in Django — share card
Made with highlit — turn any snippet into a walkthrough like this in about a minute.
Explain your code