我希望在每次刷新页面时在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]
,依此类推。
答案 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响应)。