草庐IT

django分页(两种办法)

爱学习的苗总 2023-04-03 原文
以下是分页常用的方法
numbers=list(range(50))
page=Paginator(numbers,10)
print(page.num_pages)#获取总共分了多少页
print(page.count)#总共多少条数据

page_1=page.get_page(1)#获取第一页数据
print('pake_1',page_1.number)#获取当前所在分页
print(page_1.has_next())#获取有没有下一页
print(page_1.paginator.num_pages)#用当前页面的对象,去获取总共多少页
print(page_1.paginator.count)#用当前页面的对象,去获取总共有多少条数据
print(page_1.has_previous())#获取有没有上一页
print(page_1.has_other_pages())#获取有没有其他页
# print(page_1.previous_page_number())#获取上一页的页码
print(page.get_page(2).object_list)#object_list返回的数据是一个list

。。。。。。。。。。。。。。。

前后端不分离的写法:

基础条件是先建好数据库,下边这是我建的数据库的样式,怎么创建数据库的表结构,看我之前的博客


首先第一步需要先导入: 
from django.core.paginator import Paginator   #这个是处理分页的

,然后写一个接口,返回给HTML文件,之后在html中调用这个接口里边的方法

# todo 收到请求的时候,返回HTML文件
def index2(request):

    page = request.GET.get('page', 1)  # 获取第几页
    limit = request.GET.get('limit', 3)  # 每页有多少条数据

    all_count = models.Article.objects.all()

    paginator = Paginator(all_count, limit)
    page_1 = paginator.get_page(page)
    return render(request, 'index.html', locals())

 

之后在HTML文件中,调用这个方法里边的内容,这里边每个方法是干啥用的,在文章上边看就行

{% if page_1.has_other_pages %}   
<div class="text-center mt-2 mt-sm-1 mt-md-0 mb-3 f-16">
    {% if page_1.has_previous  %}
    <a class="text-secondary" href="?page={{page_1.previous_page_number}}">上一页</a>
    {%endif%}
    <span class="mx-2">第&nbsp;{{page_1.number}}&nbsp;/&nbsp;{{ page_1.paginator.num_pages }}&nbsp;页</span>
    {%  if page_1.has_next %}
    <a class="text-success" href="?page={{page_1.next_page_number}}">下一页</a>
    {%  endif %}

</div>
{% endif %}

最后请求接口:http://IP:8999/index2/?page=1&limit=1    这个里边的page和limit是可以传递不同的参数的,样式见下边截图

二、第二种做分页的方法是前后端分离的写法,前提条件和上边一样,但是这个是自己写一个接口,然后前端在调用这个接口的数据

 首先导入:

from django.forms import model_to_dict   #这个是转字典的,要是不导入这个的话,接口返回json的时候会报错

然后,重新定义一个接口

def article_page(request):
    page = request.GET.get('page', 1)  # 获取第几页
    limit = request.GET.get('limit', 3)  # 每页有多少条数据

    all_count = models.Article.objects.all()
    paginator = Paginator(all_count, limit)
    page_1 = paginator.get_page(page)
    data_list=[]
    for i in page_1:
        mode_to=model_to_dict(i,exclude='img')#exclude这个是转字典的时候去掉,哪个字段,就是不给哪个字段转成字典
        data_list.append(mode_to)

    data = {'code': 0, "msg": '操作成功', "data": data_list, 'count': paginator.count}
    return HttpResponse(json.dumps(data))

 

 

之后在postman上请求这个接口,然后这个接口就会返回分页的信息了,具体要返回什么信息的话,的看你想要什么,接口返回的样式

第二种,接口请求的样式:

 

 

有关django分页(两种办法)的更多相关文章

  1. ruby-on-rails - 有没有办法为 CarrierWave/Fog 设置上传进度指示器? - 2

    我在Rails应用程序中使用CarrierWave/Fog将视频上传到AmazonS3。有没有办法判断上传的进度,让我可以显示上传进度如何? 最佳答案 CarrierWave和Fog本身没有这种功能;你需要一个前端uploader来显示进度。当我不得不解决这个问题时,我使用了jQueryfileupload因为我的堆栈中已经有jQuery。甚至还有apostonCarrierWaveintegration因此您只需按照那里的说明操作即可获得适用于您的应用的进度条。 关于ruby-on-r

  2. ruby - 有没有办法从 ruby​​ case 语句中访问表达式? - 2

    我想从then子句中访问c​​ase语句表达式,即food="cheese"casefoodwhen"dip"then"carrotsticks"when"cheese"then"#{expr}crackers"else"mayo"end在这种情况下,expr是食物的当前值(value)。在这种情况下,我知道,我可以简单地访问变量food,但是在某些情况下,该值可能无法再访问(array.shift等)。除了将expr移出到局部变量然后访问它之外,是否有直接访问caseexpr值的方法?罗亚附注我知道这个具体示例很简单,只是一个示例场景。 最佳答案

  3. ruby - 每个页面上的 Jekyll 分页 - 2

    据我们所知,Jekyll默认分页仅支持index.html,我想创建blog.html并在那里包含分页。有什么解决办法吗? 最佳答案 如果您创建一个名为/blog的目录并在其中放置一个index.html文件,那么您可以向_config.yml表示paginate_path:"blog/page:num"。不是使用根文件夹中的默认index.html作为分页器模板,而是使用/blog/index.html。分页器将根据需要生成类似/blog/page2/和/blog/page3/的页面。这将使您到达yourwebsite.com/b

  4. ruby - 在 factory_girl 中有没有办法获取 attributes_for 并为同一个实例元素创建? - 2

    如果我想使用“create”构建策略创建和实例,然后想使用“attributes_for”构建策略进行验证,是否可以这样做?如果我在工厂中使用序列?在Machinistgem中有可能吗? 最佳答案 不太确定我是否完全理解。而且我不是机械师的用户。但听起来您只是想做这样的事情。@attributes=FactoryGirl.attributes_for(:my_object)my_object=MyObject.create(@attributes)my_object.some_property.should==@attributes

  5. ruby-on-rails - 有没有办法在 Rails 中以编程方式查看(或打印)方法定义? - 2

    假设我在我的Rails应用中某处定义了一个名为bla的函数。在ruby​​或rails中有没有一种方法可以动态/以编程方式打印用于定义该函数的代码?例如:defblaputs"HiThere"end然后如果我调用一个函数,例如get_definition:putsget_definition(:bla)这会打印出来"puts\"HiThere\""有规范的方法吗?我以前实际上不需要这样做,而且我知道这在Rails中并不是很常见的做法。我也不想使用元(反射)编程定义我的方法,然后存储用于定义我的方法的字符串。感谢您的帮助! 最佳答案

  6. ruby - 有没有办法在 Ruby 中执行编译时类型检查? - 2

    我知道Ruby是动态和强类型的,但据我所知,由于每个参数缺少显式类型表示法(或契约),当前语法不允许在编译时检查参数类型。如果我想执行编译时类型检查,我有哪些(实际成熟的)选项?更新我的意思是类型检查类似于典型的静态类型语言。比如C。例如,C函数表示每个参数的类型,编译器检查传入的参数是否正确。voidfunc1(structAAAaaa){structBBBbbb;func1(bbb);//Wrongtype.Compiletimeerror.}作为另一个例子,Objective-C通过放置显式类型信息来做到这一点。-(id)method1:(AAA*)aaa{BBB*bbb=[[A

  7. ruby - 有没有办法让 2.4.0 中的 Ruby 弃用警告静音? - 2

    从Ruby2.4.0开始,对于使用某些已弃用的功能,会出现弃用警告。例如,Bignum、Fixnum、TRUE和FALSE都会触发弃用警告。当我修复我的代码时,有相当多的代码我希望它保持沉默,尤其是在Rails中。我该怎么做? 最佳答案 moduleKerneldefsuppress_warningsoriginal_verbosity=$VERBOSE$VERBOSE=nilresult=yield$VERBOSE=original_verbosityreturnresultendend>>X=:foo=>:foo>>X=:bar

  8. ruby - 有没有办法让文件夹包含在生产构建中但不让 jekyll 编译它? - 2

    我认为最好的例子是images/文件夹或node_modules/用于将图像和依赖项包含在最终构建中,而无需花费很长时间编译。编辑:抱歉没有具体说明,但我很清楚keep_files和exclude两者都对我的情况没有帮助。exclude从编译和站点构建中排除文件夹和文件,并且每次都需要额外的流水线工具来手动移动它们。keep_files要求文件首先存在于最终构建中,这对于某些生产环境(GitHub的gh-pages等)是不可能的 最佳答案 你可能想看看这个:ExcludingadirectoryfromJekyllwatchP.S.

  9. ruby - 有没有办法匹配两个双引号内的双引号? - 2

    我尝试了以下正则表达式,但它匹配所有双引号:(?>(?这是文本的示例:"[\"mycarslastnight\",\"Burger\",\"Decaf\"shirt\",\"Mocha\",\"marshmallows\",\"CoffeeMission\"]"我要匹配的模式是第2行中双引号之间的双引号 最佳答案 一般来说,我会说:不。给定一个字符串:\"Burger\"\"Decaf\"shirt\"你如何确定哪个\"是多余的(不匹配的)?这个是在Burger之后,还是在Decaf之后,还是一个在shirt之后?还是在任何这些词之

  10. ruby-on-rails - 在 Ruby on Rails 中验证 Django 密码给出不匹配的密码 - 2

    我正在用RubyonRails重写Django应用程序,并希望为用户保留旧密码。Django使用PBKDF2SHA1作为加密机制。所以我有一个加密密码是这个pbkdf2_sha256$10000$YsnGfP4rZ1IZ$Tpf4922MoNEjuJQA9EG2Elptyt3dMAyzBPUgmunFOW4=原密码是2bulls在Ruby中,我使用PBKDF256gem和base64进行检查。Base64.encode64PBKDF256.dk("2bulls","YsnGfP4rZ1IZ",10000,32)我很期待Tpf4922MoNEjuJQA9EG2Elptyt3dMAyzBP

随机推荐