首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用随机查询集的django分页,?page=1内容与根目录不同

使用随机查询集的Django分页,?page=1内容与根目录不同。

在Django中,分页是一种常见的需求,可以通过使用Django内置的Paginator类来实现。当使用随机查询集进行分页时,可能会遇到一个问题,即在不同页码下,查询结果可能会发生变化,导致内容与根目录不同。

这个问题的原因是,每次请求时,Django会重新执行查询并返回结果,而随机查询集的结果是不确定的,可能会导致不同页码下的内容不一致。

为了解决这个问题,可以在分页之前先将查询集的结果进行缓存,确保在同一个页面下查询结果的一致性。可以使用Django内置的缓存机制,如Memcached或Redis,将查询结果缓存起来,并设置合适的过期时间。

具体实现步骤如下:

  1. 导入缓存模块:
代码语言:txt
复制
from django.core.cache import cache
  1. 在视图函数中,先检查缓存中是否存在查询结果:
代码语言:txt
复制
def my_view(request):
    page_number = request.GET.get('page', 1)
    cache_key = f"my_queryset_{page_number}"
    queryset = cache.get(cache_key)

    if queryset is None:
        # 如果缓存中不存在查询结果,则执行查询
        queryset = MyModel.objects.order_by('?')
        cache.set(cache_key, queryset, timeout=60)  # 设置缓存过期时间为60秒

    # 使用Paginator对查询结果进行分页
    paginator = Paginator(queryset, per_page=10)
    page = paginator.get_page(page_number)

    # 其他处理逻辑...

通过以上步骤,我们在每次请求时先检查缓存中是否存在查询结果,如果存在则直接使用缓存的结果,否则执行查询并将结果缓存起来。这样可以确保在同一个页面下,不同页码的内容保持一致。

需要注意的是,缓存的过期时间需要根据实际情况进行设置,以保证数据的及时性和准确性。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云数据库MySQL、腾讯云缓存Redis等。你可以通过访问腾讯云官网(https://cloud.tencent.com/)获取更多关于这些产品的详细信息和介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django整合ElasticSearch,实现数据快速检索(有代码)

这里写目录标题 1 背景 2 Haystack 是什么 3 安装相关包,配置 4 开启es和es可视化工具 5 生成索引 6 改代码 1 背景 Haystack 官网 https://django-haystack.readthedocs.io...'haystack', ... ] 就是要把haystack当做APP注册到项目里面 2 配置 在配置文件中配置haystack使用搜索引擎后端 本地不同es,就需要不同版本,这个去官网找...3 之后创建索引类,这个就是和django里面model一样,因为model里面的每一个类代表一个表,所以我们需要新建一个文件夹,放es里面的实体类 在你对应要创建索引APP根目录下...现在看前端,因为查询功能,前端需要模糊查询,而且还有分页,这个功能咋实现 首先我们要知道,我们可以在settings.py里面配置每页显示数量 搜索结果每页显示数量 HAYSTACK_SEARCH_RESULTS_PER_PAGE...,集成,如何判断他一定就是查询es,而不是mysql,我们可以将mysql数据改了,看下查询出来是什么,如果还是原来,就是查询了es了,除非你重新更新了es了

1.9K30

django分页Paginator简单使用

之前同事在项目中写了分页一个函数,但是并没有返回结果总个数和总页数。所以我就想到了用 django 自带分页类获取分页数据。因为要分页对象可能是个列表而不是 django 模型查询。...from django.core.paginator import Paginator page_rows= "每页展示多少条数据" # 注queryset是一个模型查询 p= Paginator(...queryset, page_rows) # 获取查询总个数 total_count= p.count # 获取查询总页数 total_page= p.num_pages Paginator类源码...,换句话说是我第一页内容不管查多少次,都是第一页内容。...by,但是这是一个不可靠行为,或者说是叫做 undefined behavior ,Django 为了保证在不同数据库,不同版本数据库中数据一致,加上了这样一个强制。

1.1K30

【愚公系列】2022年04月 Python教学课程 76-DRF框架之分页

这允许您修改将大型结果拆分为各个数据页方式。 分页 API 可以支持以下任一功能: 作为响应内容一部分提供分页链接。 响应标头中包含分页链接。...内置样式目前都使用作为响应内容一部分包含链接。使用可浏览 API 时,此样式更易于访问。 仅当您使用通用视图或视图集时,才会自动执行分页。...django.core.paginator.Paginator page_size- 指示页面大小数值。如果设置,这将覆盖该设置。默认为设置键相同值。...page_size_query_param last_page_strings- 字符串值列表或元组,指示可 请求集合中最后一页一起使用值。...LimitOffsetPagination default_limit- 一个数值,指示客户端未在查询参数中提供限制时要使用限制。默认为设置键相同值。

99120

DRF系列总结二:脚手架搭建

,去掉了匿名用户读取权限,仅允许经过身份验证注册用户访问接口; 这里接口认证策略,去掉了HTTP基本认证方式(接口提供账号密码),仅保留了使用Django默认session后端进行身份验证机制...,适用于网站在相同Session环境中运行AJAX客户端;身份验证成功后,会得到以下凭据: - `request.user` 是一个 Django User 实例 - `request.auth`...我们在DRF提供一个分页基础上,进行了简单改造,内容如下: from collections import OrderedDict from rest_framework...])) 改造后接口分页格式,增加了page和total_page字段,代表当前页和总页数,并修改了返回数据字段为items,这样可以统一接口分页格式,满足前端和第三方系统对接口后台分页绝大部分需求场景...2, 3]) 路由配置 这里推荐将API部分接口路由单独拎出来,比如以/api/开头路由到DRF提供接口中: [根目录urls.py] 而在具体app路由中,直接使用DRFrouter模块

3.6K60

重点内容回顾-DRF

数据库查询 属性: queryset(指定视图所使用查询) 方法: get_queryset返回视图所使用查询 get_object从视图所使用查询集中查询指定对象,默认根据pk进行查询。...使用场景: 根据不同操作返回不同序列化器类和不同查询,重写 get_serializer_class和 get_queryset方法。...返回latest操作使用查询 else: # 返回其他操作所使用查询 5.6.6路由Router 作用 配合视图集进行使用,动态生成视图集中处理函数url配置项。...page_size = 3 # 指定获取分页数据时,传递也容量参数名称 page_size_query_param = 'page_size' # 指定最大页容量...page=&page_size= 视图关闭分页pagination_class = None 6.2异常处理 可以设置DRF框架默认异常处理,也可以自定义异常处理函数。

2.4K20

8.寻光后台管理系统-用户管理(增删改查)

权限检查通常会使用request.user和request.auth属性中身份验证信息来确定是否应允许传入请求。 权限用于授予或拒绝不同类别的用户访问 API 不同部分。...django_paginator_class - django框架分页类。默认使用django.core.paginator.Paginator。 page_size - 表示一页数据条数数值。...limit表示要返回最大项数,与其他样式中page_size相同。offset表示查询相对于完整分页起始位置。...default_limit - 一个数字值,表示客户端在查询参数中未提供limit时所使用值。默认值PAGE_SIZE设置键相同。...page=1&pageSize=20&_=1661078091156 请求参数: page: 1 pageSize: 20 _: 1661078091156 响应内容: { "code": ,

1.8K30

通过 Django Pagination 实现简单分页

Django 内置 Pagination 能够帮助我们实现简单分页功能,在上一篇教程[3]中我们使用脚本批量生成了几百篇博客文章,正好用于测试分页效果。...# 查询第二页上一页页码 >>> page2.previous_page_number() 1 查看某一页是否还有下一页,以及查询该页下一页页码: # 查询第二页是否还有下一页 >>> page2...用 Paginator 给文章列表分页 使用上面的一些方法,我们可以实现一个类似于 Django 官方博客一样简单分页效果,效果如下。...不过在我们博客项目中,我们不必写这些代码了。回顾在 Django 官方推荐姿势:类视图[6] 中内容,我们已将视图函数转换成了类视图。...仅仅使用 Django Pagination 内置方法无法实现这样效果,需要自己写分页逻辑或者借助第三方库。

91020

Django Pagination 简单分页

>>> page2.previous_page_number() 1 查看某一页是否还有下一页,以及查询该页下一页页码: # 查询第二页是否还有下一页 >>> page2.has_next() False...# 查询第二页下一页页码 >>> page2.next_page_number() django.core.paginator.EmptyPage: That page contains no results...用 Paginator 给文章列表分页 使用上面的一些方法,我们可以实现一个类似于 Django 官方博客一样简单分页效果,效果如下。...ListView 传递了以下和分页有关模板变量供我们在模板中使用: paginator ,即 Paginator 实例。 page_obj ,当前请求页面分页对象。...进一步拓展 使用 Django 内置 Pagination 只能实现上面的简单分页效果,但通常更加高级分页效果应该像下图这样: image.png 当前页面高亮显示,且显示当前页面前后几页页码,

2.1K50

Django REST Framework-如何使用分页

我们还为客户端指定了可以在查询参数中使用 pagepage_size 参数,并设置了最大页面大小为 100。...客户端可以在查询参数中指定 pagepage_size 参数来请求不同数据范围。...LimitOffsetPaginationLimitOffsetPagination 分页器也是一种基于页码分页器,但 PageNumberPagination 不同是,它允许客户端指定一个偏移量和每页返回对象数量来请求数据...客户端可以在查询参数中指定 limit 和 offset 参数来请求不同数据范围。基于游标的分页器基于游标的分页基于页码分页不同,它使用一个游标来标识要返回数据范围。...客户端可以使用 next 和 previous 参数来请求下一页和上一页。在 Django REST Framework 中,分页器是一种将查询结果划分为多个页面并将每个页面的数据返回给客户端工具。

1.9K41

Python Django开发 经验技巧总结(一)

文章目录 1.前后台数据传递 2.数据库交互并返回数据几种比较常用方法 3.一个表单对应多个按钮解决方案 4.HTML中表单控件及操作 5.消息框架 message使用 6.日期和时间DateField...auto_now、auto_now_add 7.获取已登录用户名字 8.数据库表中属性自增/自减操作 9.执行原始sql语句 10.分页显示数据 1.前后台数据传递 view -> HTML:使用...value是显示内容,并且后端提交后也将此作为值,其中name是后端获取时所用的如后端使用 select = request.POST['select']获取这个单选按钮value,另外也可以用select...5.消息框架 message使用 消息级别: 级别 说明 DEBUG 将在生产部署中忽略(或删除)开发相关消息 INFO 普通提示信息 SUCCESS 成功信息 WARNING 警告信息 ERROR...9.执行原始sql语句 (1)extra()方法: 结果修改器,一种提供额外查询参数机制。

1.3K10

django 写测试工具用到 paginator 分页

作者:郭佳明 导语 之前写CC测试平台时候,里面有一个机器管理列表信息,使用表格来展示,数据量大概有240多条,需要用到分页。...后面做分页使用django paginator。做好之后发现,其实bootstrap table也不完全适用我场景,稍微心里好受点。。...如果想要看bootstrap table做表格以及分页就网上找资料吧,挺多django paginator也是,现在我主要是再次分享一下我使用经验。...使用简单,就两步操作如下: 1.django后台页面views文件引用了三个django paginator包,然后主要逻辑按照如下格式对 all_agents变量做一下分页处理打包成agents变量...page_num=1 #这里默认查询page_num=1第一页数据 if 'page' in request.GET:

89500

使用 Django Pagination 实现简单分页功能

这个类位于 django/core/paginator.py,需要使用它时,只需在适当地方导入这个类即可。...>>> page2.previous_page_number() 1 查看某一页是否还有下一页,以及查询该页下一页页码: # 查询第二页是否还有下一页 >>> page2.has_next() False...用 Paginator 给文章列表分页 使用上面的一些方法,我们可以实现一个类似于 Django 官方博客一样简单分页效果,效果如下。...我们这里设置和 Django 官方博客那样分页导航样式(具体样式见上图)。 在你想要显示分页信息地方使用下面的代码。...进一步拓展 使用 Django 内置 Pagination 只能实现上面的简单分页效果,但通常更加高级分页效果应该像下图这样: image.png 当前页面高亮显示,且显示当前页面前后几页页码,

1.9K90

【愚公系列】2022年01月 Python教学课程 42-Django框架之ORM中查询详解

查询,也称查询结果、QuerySet,表示从数据库中获取对象集合。 当调用如下过滤器方法时,Django会返回查询(而不是简单列表): all():返回所有数据。...过滤器基于所给参数限制查询结果。 从SQL角度讲,查询select语句等价,过滤器像where、limit、order by子句。...2 两大特性 1)惰性执行 创建查询不会访问数据库,直到调用数据时,才会访问数据库,调用数据情况包括迭代、序列化、if合用 例如,当执行如下语句时,并未进行数据库查询,只是创建了一个查询books...使用同一个查询,第一次使用时会发生数据库查询,然后Django会把结果缓存下来,再次使用这个查询时会使用缓存数据,减少了数据库查询次数。...paginator=Paginator(books,2) #获取指定页码数据 page_skus = paginator.page(1) #获取分页数据 total_page=paginator.num_pages

1.9K40

django 自带分页功能

方法一:使用 Paginator 分页 1. https://doc.codingdict.com/django/topics/pagination.html Paginator 分页Django提供了一些类来帮助你管理分页数据...这样的话如果对象存在count(),比如DjangoQuerySet,就可以使用更加高效 count() 使用 Paginator 这里有一些复杂一点例子,它们在视图中使用 Paginator 来为查询分页...这样会使类似于Django’s QuerySet对象使用更加便捷count()方法,如果存在的话。 Paginator.num_pages¶ 页面总数。...Page.start_index()[source]¶ 返回当前页上第一个对象,相对于分页列表所有对象序号,从1开始。...Page.end_index()[source]¶ 返回当前页上最后一个对象,相对于分页列表所有对象序号,从1开始。

90110

Django 实现分页功能

分页经常在网站上随处可见,它大概是这样子: 点击查看大图 这样实现不仅提高了用户体验,还是减轻数据库读取数据压力。Django 自带名为 Paginator 分页工具, 方便我们实现分页功能。...本文就讲解如何使用 Paginator 实现分页功能。 1 Paginator Paginator 类作用是将我们需要分页数据分割成若干份。...当我们实现化一个 Paginator 类实例时,需要给 Paginator 传入两个参数。第一个参数是数据源,可以是一个列表、元组、以及查询结果 QuerySet。...具体用法如下: # 使用 paginator 对象返回第 1 page 对象 books = paginator.page(1) Page 对象有三个常用属性: object_list: 表示当前页面上所有对象列表...3.1 视图 在 views.py 获取需要展示全部数据,然后使用 Paginator 类对数据进行分页,最后返回第 1 页面的 page 对象。

1.5K20

django 1.8 官方文档翻译:13-6 分页

分页 Django提供了一些类来帮助你管理分页数据 – 也就是说,数据被分在不同页面中,并带有“上一页/下一页”标签。这些类位于django/core/paginator.py中。...这样会使类似于DjangoQuerySet对象使用更加高效 count()方法,如果存在的话。...使用 Paginator 这里有一些复杂一点例子,它们在视图中使用 Paginator 来为查询分页。我们提供视图以及相关模板来展示如何展示这些结果。...``start_index()[source] 返回当前页上第一个对象,相对于分页列表所有对象序号,从1开始。...``end_index()[source] 返回当前页上最后一个对象,相对于分页列表所有对象序号,从1开始。

39030
领券