I have recently implemented Django's excellent cache framework. However from what I understand Django will not cache a view that is passed parameters in a get request. I have an Ajax view that is passed get parameters that I would like to cache for X seconds, what would be an easy way to do this?
In psuedo code I currently have a URL:
http://mysites/ajaxthing/?user=foo&items=10
I would like to cache any this url as long as it has the same get parameters.
I'm currently using the cache decorators in my view:
myview(stuff)
myview = cache_page(myview, 60 * 3)
I did read about django's vary headers but it went a little over my head, and I'm not even sure its the correct solution
Right, vary headers is not the correct solution, it's used when you want to cache based on client request headers like user-agent etc.
You'll need to use low-level API or template fragment caching. It depends on your views really.
With low-level API it looks something like this:
from django.core.cache import cache
def get_user(request):
user_id = request.GET.get("user_id")
user = cache.get("user_id_%s"%user_id)
if user is None:
user = User.objects.get(pk=user_id)
cache.set("user_id_%s"%user_id, user, 10*60) # 10 minutes
...
..
.
Yes, you can use django-view-cache-utils, here is code for your case:
from view_cache_utils import cache_page_with_prefix
from django.utils.hashcompat import md5_constructor
...
@cache_page_with_prefix(60*15, lambda request: md5_constructor(request.get_full_path()).hexdigest())
def my_view(request):
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With