 <p>Firstly, it's the <em>view</em> rather than the <em>template</em> that you want to control HTTP caching on.</p> <p>The template is just a chunk of HTML that can be rendered by any view, the view is what sends an HTTP Response to the web browser.</p> <p>Django comes with some handy view decorators for controlling the HTTP headers returned by a view:<br> <a href="https://docs.djangoproject.com/en/1.9/topics/cache/#controlling-cache-using-other-headers" rel="nofollow">https://docs.djangoproject.com/en/1.9/topics/cache/#controlling-cache-using-other-headers</a></p> <p>You can find this simple example in the docs:</p> <pre><code>from django.views.decorators.cache import never_cache @never_cache def myview(request): # ... </code></pre> <p>If you are using 'class-based' views rather than simple functions then there's a <a href="https://gist.github.com/cyberdelia/1231560" rel="nofollow">gist here</a> with an example of how to convert this decorator into a view Mixin class:</p> <pre><code>from django.utils.decorators import method_decorator from django.views.decorators.cache import never_cache class NeverCacheMixin(object): @method_decorator(never_cache) def dispatch(self, *args, **kwargs): return super(NeverCacheMixin, self).dispatch(*args, **kwargs) </code></pre> <p>...which you'd use in your project like:</p> <pre><code>from django.views.generic.detail import DetailView class ArticleView(NeverCacheMixin, DetailView): template_name = "article_detail.html" queryset = Article.objects.articles() context_object_name = "article" </code></pre>