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 isinstance判断对象类型
Sep 06 Python
Python translator使用实例
Sep 06 Python
详解Python的Django框架中manage命令的使用与扩展
Apr 11 Python
Python的面向对象编程方式学习笔记
Jul 12 Python
用于业余项目的8个优秀Python库
Sep 21 Python
python实现一个简单的udp通信的示例代码
Feb 01 Python
python创造虚拟环境方法总结
Mar 04 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
Aug 30 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
Python参数传递实现过程及原理详解
May 14 Python
Python如何进行时间处理
Aug 06 Python
10个python爬虫入门实例(小结)
Nov 01 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转成EXE文件
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(2)
2006/10/09 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
使用户点击后退按钮使效三行代码
2007/07/07 Javascript
Yii-自定义删除确认弹框(zyd)jquery实现代码
2013/03/04 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
Angular2表单自定义验证器的实现
2016/10/19 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
基于element-ui封装表单金额输入框的方法示例
2021/01/06 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python3 模块、包调用&路径详解
2017/10/25 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python通过字典映射函数实现switch
2020/11/06 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
HTML5 使用 sessionStorage 进行页面传值的方法
2018/07/02 HTML / CSS
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
电子商务个人自荐信
2013/12/12 职场文书
旅游管理专业个人求职信范文
2013/12/24 职场文书
施工安全责任书
2014/04/14 职场文书
创业女性典型材料
2014/05/02 职场文书
工作求职信
2014/07/04 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
死亡诗社观后感
2015/06/05 职场文书
在CSS中映射鼠标位置并实现通过鼠标移动控制页面元素效果(实例代码)
2021/04/22 HTML / CSS
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android