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网页请求urllib2模块简单封装代码
Feb 07 Python
Python的Django框架中的数据库配置指南
Jul 17 Python
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python网络爬虫出现乱码问题的解决方法
Jan 05 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
Django 连接sql server数据库的方法
Jun 30 Python
python将.ppm格式图片转换成.jpg格式文件的方法
Oct 27 Python
Python-while 计算100以内奇数和的方法
Jun 11 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
python deque模块简单使用代码实例
Mar 12 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python map及filter函数使用方法解析
Aug 06 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实现域名whois查询的代码(数据源万网、新网)
2010/02/22 PHP
检查php文件中是否含有bom的函数
2012/05/31 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
Yii框架数据模型的验证规则rules()被执行的方法
2016/12/02 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
BACKBONE.JS 简单入门范例
2017/10/17 Javascript
vue中引用swiper轮播插件的教程详解
2018/08/16 Javascript
this在vue和小程序中的使用详解
2019/01/28 Javascript
nodejs微信开发之授权登录+获取用户信息
2019/03/17 NodeJs
layui-tree实现Ajax异步请求后动态添加节点的方法
2019/09/23 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
javascript实现随机抽奖功能
2020/12/30 Javascript
布同 统计英文单词的个数的python代码
2011/03/13 Python
wxPython中文教程入门实例
2014/06/09 Python
python集合类型用法分析
2015/04/08 Python
为Python的web框架编写前端模版的教程
2015/04/30 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
关于Tensorflow使用CPU报错的解决方式
2020/02/05 Python
python3 sorted 如何实现自定义排序标准
2020/03/12 Python
虚拟机下载python是否需要联网
2020/07/27 Python
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
西班牙汉普顿小姐:购买帆布鞋和太阳镜
2016/10/23 全球购物
马来西亚时装购物网站:ZALORA马来西亚
2017/03/14 全球购物
单位提档介绍信
2014/01/17 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
组织生活会发言材料
2014/12/15 职场文书
2016党性教育学习心得体会
2016/01/21 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android