我有一个CBV列表视图,我获取并随机查询集并对其进行分页,但是,我看到内容似乎与somedomain.com/quiz/1
和somedomain.com/quiz/1/?page=1
有所不同我的列表视图如下所示:
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 中,我缓存我的页面,以便它在一段时间(50000 秒(的时间内返回相同的值,如下所示:
path('somedomain.com/quiz/1', cache_page(50000)(Test_ListView1.as_view()), name="test1" ),
但是,我仍然看到somedomain.com/quiz/1
和somedomain.com/quiz/1/?page=1
之间的差异 - 它们似乎是两个不同的页面。
如何使它们相同?
根据这个票证,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)