Как передать pk из представления в функцию key_prefix в декораторе cache_page - PullRequest
0 голосов
/ 20 июня 2019

Возможно ли как-то передать «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)

...