Question: I have a view and I cached it in views.py using django-cacheops (https://github.com/Suor/django-cacheops): @cached_view(timeout=60*15) @csrf_exempt def order(request, usr): ...  The regex for order view in urls.py: url(r'^order/(?P<usr>\D+)$', views.order, name='ord') # Example Url: http://127.0.0.1:8000/order/demo (demo is the user name)  And I want to invalidate the cached view order inside the below view: @login_required def available(request, pk, avail): pk = int(pk) avail = strtobool(avail) if avail: Product.objects.filter(id = pk).update(available = True) else: Product.objects.filter(id = pk).update(available = False) return HttpResponseRedirect(reverse_lazy('yc'))  According to the docs, we can achieve this by doing: @login_required def available(request, pk, avail): pk = int(pk) avail = strtobool(avail) if avail: Product.objects.filter(id = pk).update(available = True) order.invalidate("http://127.0.0.1:8000/order/demo", "demo") #it's a dummy url I've handled it dynamically in my code else: Product.objects.filter(id = pk).update(available = False) order.invalidate("http://127.0.0.1:8000/order/demo", "demo") #it's a dummy url I've handled it dynamically in my code return HttpResponseRedirect(reverse_lazy('yc'))  But it's not working. Here are my logs using redis-cli monitor: 1647434341.849096 [1 [::1]:59650] "GET" "c:af687d461ec8bb3c48f6392010e54778" 1647434341.866966 [1 [::1]:59650] "SETEX" "c:af687d461ec8bb3c48f6392010e54778" "900" "\x80\x04\x95\xfa\b\x00\x00\x00\x00\x00\x00\x8c\x14django.http.response\x94\x8c\x0cHttpResponse\x94\x93\x94)\x81\x94}\x94(\x8c\b_headers\x94}\x94\x8c\x0ccontent-type\x94\x8c\x0cContent-Type\x94\x8c\x18text/html; charset=utf-8\x94\x86\x94s\x8c\x11_closable_objects\x94]\x94\x8c\x0e_handler_class\x94N\x8c\acookies\x94\x8c\x0chttp.cookies\x94\x8c\x0cSimpleCookie\x94\x93\x94)\x81\x94\x8c\x06closed\x94\x89\x8c\x0e_reason_phrase\x94N\x8c\b_charset\x94N\x8c\n_container\x94]\x94B\xed\a\x00\x00<!DOCTYPE html>\n\n<html>\n <head>\n <meta charset=\"utf-8\">\n <title>Buy Products</title>\n <link href=\"https://fonts.googleapis.com/css?family=Peralta\" rel=\"stylesheet\">\n <link rel=\"stylesheet\" href=\"/static/css/bootstrap.min.css\">\n <link rel=\"stylesheet\" href=\"/static/css/app.css\">\n </head>\n <body>\n <div class=\"wrapper\">\n <div class=\"container\">\n <ol class=\"breadcrumb my-4\">\n <li class=\"breadcrumb-item active\" style=\"color: #000;\">Buy Products</li>\n </ol>\n <form method=\"post\">\n <!-- <input type=\"hidden\" name=\"csrfmiddlewaretoken\" value=\"SnsBnyPIwIDejqctR7TMNkITcSafgwiydwsyIiAKQkiSvr3nFA0cm1Tf3Mk6JTPj\"> -->\n <p><label for=\"id_name\">Name:</label> <select name=\"name\" id=\"id_name\">\n <option value=\"Redmi note 5\">Product Name: Redmi note 5 \n MRP: 100000 \n Discounted Price: 45678 \n Description: It&#39;s good phone too</option>\n\n <option value=\"xiomi 2\">Product Name: xiomi 2 \n MRP: 10000 \n Discounted Price: 200 \n Description: xyz</option>\n\n <option value=\"mouse\">Product Name: mouse \n MRP: 1400 \n Discounted Price: 200 \n Description: xyzat</option>\n\n</select></p>\n<p><label for=\"id_user_name\">User name:</label> <textarea name=\"user_name\" cols=\"40\" rows=\"1\" maxlength=\"30\" required id=\"id_user_name\">\n</textarea></p>\n<p><label for=\"id_adress\">Adress:</label> <textarea name=\"adress\" cols=\"40\" rows=\"2\" maxlength=\"4000\" required id=\"id_adress\">\n</textarea></p>\n<p><label for=\"id_mobile\">Mobile:</label> <textarea name=\"mobile\" cols=\"40\" rows=\"1\" maxlength=\"10\" required id=\"id_mobile\">\n</textarea></p>\n<p><label for=\"id_qty\">Qty:</label> <input type=\"number\" name=\"qty\" required id=\"id_qty\"></p>\n <button type=\"submit\" class=\"btn btn-success\">Buy</button>\n </form>\n </div>\n <div class=\"push\"></div>\n </div>\n <script src=\"/static/js/jquery-3.2.1.min.js\"></script>\n <script src=\"/static/js/popper.min.js\"></script>\n <script src=\"/static/js/bootstrap.min.js\"></script>\n </body>\n</html>\n\x94aub." 1647434354.133804 [1 [::1]:59650] "DEL" "c:94c7a9e7f6c7a45ee645caa02f53d000"  It looks like it's deleting some other cache. I've also raised the issue in the repo of django-cache, you can check it for more information: https://github.com/Suor/django-cacheops/issues/425

Answer: Since you used a named group usr in your regex, Django passes it as a keyword argument: url(r'^order/(?P<usr>\D+)$', views.order, name='ord')  But you are trying to invalidate the cache with a positional argument: order.invalidate("http://127.0.0.1:8000/order/demo", "demo")  Instead, invalidate it with the corresponding keyword argument: order.invalidate("http://127.0.0.1:8000/order/demo", usr="demo")