def test_fragment_cache_miss(self): # get the comment we want to invalidate the cache for comment = Comment.objects.latest() # cache the fragment from django.template import Context, Template template = Template(""" {% load cachesweeper_tags %} {% cachesweeper comment 500 "comment.xml" %} <p> <strong>{{comment.user}}</strong> said at {{comment.created_at}}:<br/> {{comment.content}} <br/> </p> {% endcachesweeper %} """) template.render(Context({'comment': comment})) # assert the cache hit cache_key = generate_fragment_cache_key_for_record(comment, "comment.xml") self.assertTrue(cache.get(cache_key)) # modifying the model should change the cache comment.like_it() # assert the changed cache key new_cache_key = generate_fragment_cache_key_for_record(comment, "comment.xml") self.assertNotEquals(cache_key, new_cache_key) # assert the cache miss self.assertFalse(cache.get(new_cache_key))
def render(self, context): expire_time = self.get_expire_time(context) model = self.get_model(context) unique_fragment_cache_keys = [var.resolve(context) for var in self.cache_key_vars] cache_key = generate_fragment_cache_key_for_record(model, *unique_fragment_cache_keys) value = cache.get(cache_key) if value is None: value = self.nodelist.render(context) cache.set(cache_key, value, expire_time) return value