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模块之StringIO使用示例
Apr 08 Python
Python基础篇之初识Python必看攻略
Jun 23 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
Python使用itchat 功能分析微信好友性别和位置
Aug 05 Python
python实现读取excel文件中所有sheet操作示例
Aug 09 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
浅谈Pycharm的项目文件名是红色的原因及解决方式
Jun 01 Python
pytorch简介
Nov 11 Python
python爬虫中抓取指数的实例讲解
Dec 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
2015/12/25 PHP
php使用crypt()函数进行加密
2017/06/08 PHP
PHP实现时间比较和时间差计算的方法示例
2017/07/24 PHP
js加解密 脚本解密
2008/02/22 Javascript
关于js拖拽上传 [一个拖拽上传修改头像的流程]
2011/07/13 Javascript
文本框input聚焦失焦样式实现代码
2012/10/12 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
node.js中的fs.realpath方法使用说明
2014/12/16 Javascript
测试IE浏览器对JavaScript的AngularJS的兼容性
2015/06/19 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
D3.js实现散点图和气泡图的方法详解
2016/09/21 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
nodejs调取微信收货地址的方法
2017/12/20 NodeJs
微信小程序地图(map)组件点击(tap)获取经纬度的方法
2019/01/10 Javascript
vue-router之解决addRoutes使用遇到的坑
2020/07/19 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
[01:30:54]《加油DOTA》 第三期
2014/08/18 DOTA
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
wxPython中listbox用法实例详解
2015/06/01 Python
使用Python的Scrapy框架十分钟爬取美女图
2016/12/26 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
python打开windows应用程序的实例
2019/06/28 Python
python中sys模块是做什么用的
2020/08/16 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
使用分层画布来优化HTML5渲染的教程
2015/05/08 HTML / CSS
酒店司机岗位职责
2013/12/14 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
论群众路线学习笔记
2014/11/06 职场文书
图书借阅制度范本
2015/08/06 职场文书
MySQL通过binlog恢复数据
2021/05/27 MySQL
使用vuex-persistedstate本地存储vuex
2022/04/29 Vue.js
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python