Возможно ли как-то передать «pk» из представления «show_by_heading_view» в функцию «var_on_paginated_or_not», используя отношение декоратор / функция ??Только я думаю, как это сделать, что пришло мне в голову, - это проанализировать запрос и получить его оттуда:
pk = request.get_full_path_info().split("/")[-2]
Но это своего рода ненадежный способ, так как URL может измениться.Я бы предпочел сделать это питонским способом, но не знаю, как.
@ cache_page decorator из пакета fancy_cache, поэтому он может использовать вызываемое…
Функция «var_on_paginated_or_not» определяет, какая часть пагинации включена илине аннулировать кеш, если это так ...
Спасибо
def vary_on_paginated_or_not(request):
pk = request.get_full_path_info().split("/")[-2]
count_eq = Article.objects.filter(foreignkey_to_subheading=int(pk)).count()
return "show_by_heading_view+%s" % True if count_eq > 10 else False
@cache_page(60*60*24*7, key_prefix=vary_on_paginated_or_not)
def show_by_heading_view(request, pk): #597
current_heading = get_object_or_404(SubHeading, pk=pk)
list_of_articles = Article.objects.filter(foreignkey_to_subheading=pk)
if "keyword" in request.GET:
keyword = request.GET["keyword"]
keyword_unidecode = unidecode.unidecode(keyword)
q = Q(title__icontains=keyword) | Q(content__icontains=keyword) | Q(
title__icontains=keyword_unidecode) | Q(content__icontains=keyword_unidecode)
list_of_articles = list_of_articles.filter(q)
else:
keyword = ""
form = SearchForm(initial={"keyword": keyword})
paginator = Paginator(list_of_articles, 10)
if "page" in request.GET:
page_num = request.GET["page"]
else:
page_num = 1
page = paginator.get_page(page_num)
context = {"current_heading": current_heading, "page": page,
"list_of_articles": page.object_list, "form": form} # 597
return render(request, "articles/show_by_subheading.html", context)