예제 #1
0
 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