When you have cache middleware enabled, Django caches the rendered template. When the next request is made, Django checks the cache for the template, and if it exists, it returns a 304 Not Modified rather than the normal 200 Found HTTP response. That tells your browser to pull it from its cache instead of pulling it down from the server again. (It's a lot more complicated than this in practice, but I'm simplifying).
Long and short, is this is how caching in Django works. If you don't want this behavior, then you can either disable the cache (not the cache middleware), by telling it to use the DummyCache
backend:
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.dummy.DummyCache',
}
}
This will result in Django always returning a 200 with a fresh copy because it can never find the cached copy. You can also add the following setting to settings.py:
CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
Then, if you're logged in (through admin or otherwise), the response will vary on that and always return a fresh copy. However, this will effect normal users of your site as well, if you have any public-facing login capability.