Django的ListView超详细用法(含分页paginate)


Posted in Python onMay 21, 2020

开发环境:

  • python 3.6
  • django 1.11

场景一

经常有从数据库中获取一批数据,然后在前端以列表的形式展现,比如:获取到所有的用户,然后在用户列表页面展示。

解决方案

常规写法是,我们通过Django的ORM查询到所有的数据,然后展示出来,代码如下:

def user_list(request):
  """返回UserProfile中所有的用户"""
  users = UserProfile.objects.all()
  return render(request, 'talks/users_list.html', context={"user_list": users})

这样能够解决问题,但是Django针对这种常用场景,提供了一个更快速便捷的方式,那就是ListView,用法如下:

from django.views.generic import ListView

class UsersView(ListView):

  model = UserProfile
  template_name = 'talks/users_list.html'
  context_object_name = 'user_list'

这样我们就完成了上边功能,代码很简洁。

场景二:

我想要对数据做过滤,ListView怎么实现?代码如下:

from django.views.generic import ListView

class UsersView(ListView):

  model = UserProfile
  template_name = 'talks/users_list.html'
  context_object_name = 'user_list'
  
  def get_queryset(self): # 重写get_queryset方法
  # 获取所有is_deleted为False的用户,并且以时间倒序返回数据
  return UserProfile.objects.filter(is_deleted=False).order_by('-create_time')

如果你要对数据做更多维度的过滤,比如:既要用户是某部门的,还只要获取到性别是男的,这时候,可以使用Django提供的Q函数来实现。

场景三

我想要返回给Template的数据需要多个,不仅仅是user_list,可能还有其他数据,如获取当前登陆用户的详细信息,这时怎么操作?,代码如下:

from django.views.generic import ListView

class UsersView(ListView):

  model = UserProfile
  template_name = 'talks/users_list.html'
  context_object_name = 'user_list'

  def get_context_data(self, **kwargs):  # 重写get_context_data方法
    # 很关键,必须把原方法的结果拿到
    context = super().get_context_data(**kwargs)
    username = self.request.GET.get('user', None)
    context['user'] = UserProfile.objects.get(username=username
    return context

这样,你返回给Template页面时,context包含为{'user_list': user_list, 'user': user}。

场景四

我想要限制接口的请求方式,比如限制只能GET访问,代码如下:

from django.views.generic import ListView

class UsersView(ListView):

  model = UserProfile
  template_name = 'talks/users_list.html'
  context_object_name = 'user_list'
  http_method_names = ['GET'] # 加上这一行,告知允许那种请求方式

场景五

我卡卡卡的返回了所有的数据给前端页面,前页面最好得分页展示呀,这怎么搞?

到此这篇关于Django的ListView超详细用法(含分页paginate)的文章就介绍到这了,更多相关Django的ListView用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python使用cookielib库示例分享
Mar 03 Python
进一步探究Python的装饰器的运用
May 05 Python
Django发送html邮件的方法
May 26 Python
Python中函数及默认参数的定义与调用操作实例分析
Jul 25 Python
Python数据结构与算法之列表(链表,linked list)简单实现
Oct 30 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
Python动态参数/命名空间/函数嵌套/global和nonlocal
May 29 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
python opencv捕获摄像头并显示内容的实现
Jul 11 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
Oct 24 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Django中FilePathField字段的用法
May 21 #Python
Django 解决上传文件时,request.FILES为空的问题
May 20 #Python
使用 django orm 写 exists 条件过滤实例
May 20 #Python
django 解决自定义序列化返回处理数据为null的问题
May 20 #Python
python实现126邮箱发送邮件
May 20 #Python
python3.6使用SMTP协议发送邮件
May 20 #Python
Python操作Excel把数据分给sheet
May 20 #Python
You might like
PHP写的求多项式导数的函数代码
2012/07/04 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
使用PHP进行微信公众平台开发的示例
2015/08/21 PHP
Yii快速入门经典教程
2015/12/28 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
复制本贴标题和地址的js代码
2008/07/01 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
jQuery dialog 异步调用ashx,webservice数据的代码
2010/08/03 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
JQuery伸缩导航练习示例
2013/11/13 Javascript
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
JavaScript检查子字符串是否在字符串中的方法
2016/02/03 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
node.js调用Chrome浏览器打开链接地址的方法
2017/05/17 Javascript
Angular2.0实现modal对话框的方法示例
2018/02/18 Javascript
基于iview-admin实现动态路由的示例代码
2019/10/02 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
jQuery实现点击滚动到指定元素上的方法分析
2020/03/19 jQuery
Python 一句话生成字母表的方法
2019/01/02 Python
Python assert语句的简单使用示例
2019/07/28 Python
Python3之外部文件调用Django程序操作model等文件实现方式
2020/04/07 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
详解Django中的FBV和CBV对比分析
2021/03/01 Python
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
夜大自我鉴定
2013/10/31 职场文书
2014年初一班主任工作总结
2014/11/08 职场文书
工作失误检讨书范文
2015/01/26 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
python开发制作好看的时钟效果
2022/05/02 Python