在Django中每次刷新页面时获取不同的数据集

时间:2018-07-01 20:38:07

标签: python django

我希望在每次刷新页面时在Django的查询集中获取下一个x项。

示例:
x是我用来从查询集中选择的数字列表。如

for i in x:
q = Django.objects.filter(name=name)[i]

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 我想获得商品的[0, 1, 2, 3, 4, 5]。然后在下一页刷新获取项目的[6, 7, 8, 9, 0, 1]。请注意,如果没有其他6个项目,则该列表将从末尾开始滚动。

到目前为止,我得到了查询集的长度,然后使用x % 6来查看是否不必修改列表

如果这是多用户友好的,那也很好 多用户示例:
x与上面相同。用户1加载页面时,他们得到[0, 1, 2, 3, 4, 5]。现在,用户2加载页面并获取[6, 7, 8, 9, 0, 1]。现在,用户1重新加载并获取[2, 3, 4, 5, 6, 7],依此类推。

1 个答案:

答案 0 :(得分:0)

您可以使用 cookie ,其中一些信息存储在客户端计算机上,并且可以更新。在cookie中,例如,您可以存储到目前为止的索引,然后对其进行更新。喜欢:

def some_view(request):
    nqs = qs.objects.filter(name=name).count()
    idx = int(request.COOKIES.get('current_index', 0))
    if idx+5 < nqs:
        qs = Django.objects.filter(name=name)[idx:idx+6]
        idx += 6
    else:
        qs = list(Django.objects.filter(name=name)[idx:nqs])
        idx += 6-nqs
        qs += Django.objects.filter(name=name)[:idx+6-nqs]
    response = render(request, 'some_template.html', {'qs': qs})
    set_cookie(response, 'current_index', str(idx+6))
    return response

因此,我们以名称'current_index'存储一个cookie,并且每次获取该cookie。如果cookie不存在,我们使用0作为默认值。接下来,我们执行一些操作来获取项目:如果有足够的空间,则取一个切片,否则使用两个切片。

我们通过将索引前进6位来更新索引(如果我们到达列表的末尾,请使用模数),然后将cookie设置为(新)值。然后,我们返回响应。

在这里,我们将模板渲染设置为响应(通过调用render(..),但是您当然可以构造一个自定义HTTP响应)。