django разбиение на страницы со случайным набором запросов,? Page = 1 содержимое отличается от root - PullRequest
1 голос
/ 10 января 2020

У меня есть CBV ListView, для которого я получаю случайный набор запросов и разбиваю его на страницы, но я вижу, что кажется, что содержимое отличается от somedomain.com/quiz/1 и somedomain.com/quiz/1/?page=1

Мой Listview выглядит так :

class Test_ListView1(ListView):
    template_name = "test.html"
    paginate_by = 12
    context_object_name = "test"

    def get_queryset(self):
        queryset = list(SomeModel.objects.order_by("-created_at").values('id','question_field','some_json'))
        random.shuffle(queryset)
        return queryset[:24]

в моих URL, я кеширую свою страницу, чтобы она возвращала одно и то же значение в течение определенного периода (50000se c) времени, например:

path('somedomain.com/quiz/1', cache_page(50000)(Test_ListView1.as_view()), name="test1" ),

, но Я до сих пор вижу разницу между somedomain.com/quiz/1 и somedomain.com/quiz/1/?page=1 - они кажутся двумя разными страницами ..

Как мне сделать их одинаковыми?

1 Ответ

1 голос
/ 10 января 2020

В соответствии с этим тикет Django учитывает параметры запроса при построении ключа кэша. Вы можете увидеть источник здесь . * Здесь используется request.build_absolute_uri(), который возвращает полный URL с параметрами запроса. Вот почему somedomain.com/quiz/1 и somedomain.com/quiz/1/?page=1 - это разные страницы для промежуточного программного обеспечения кэша.

Поэтому для исправления, я полагаю, вы можете просто добавить перенаправление, если page параметр запроса не предоставлен, что-то вроде этого:

def get(self, request):
    if not request.GET.get("page"):
        return redirect(reverse('view_name') + '?page=1')
    return super().get(request) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...