Django 分页与随机查询集,?page=1 内容与 root 不同



我有一个CBV列表视图,我获取并随机查询集并对其进行分页,但是,我看到内容似乎与somedomain.com/quiz/1somedomain.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/1somedomain.com/quiz/1/?page=1之间的差异 - 它们似乎是两个不同的页面。

如何使它们相同?

根据这个票证,Django 在构造缓存键时会考虑查询参数。你可以在这里看到来源。request.build_absolute_uri()在这里使用它返回带有查询参数的完整 URL。这就是为什么somedomain.com/quiz/1somedomain.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) 

相关内容

  • 没有找到相关文章

最新更新