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 socket 超时设置 errno 10054
Jul 01 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
Python3实现Web网页图片下载
Jan 28 Python
Python反射和内置方法重写操作详解
Aug 27 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
使用python远程操作linux过程解析
Dec 04 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
python实现飞行棋游戏
Feb 05 Python
python logging设置level失败的解决方法
Feb 19 Python
python TCP包注入方式
May 05 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入门教程 精简版
2009/12/13 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP命名空间namespace用法实例分析
2016/09/27 PHP
Yii2实现UploadedFile上传文件示例
2017/02/15 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
jQuery技巧总结
2011/01/01 Javascript
js两行代码按指定格式输出日期时间
2011/10/21 Javascript
js和php如何获取当前url的内容
2013/09/22 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
JavaScript操作DOM元素的childNodes和children区别
2015/04/01 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
Bootstrap Paginator分页插件使用方法详解
2016/05/30 Javascript
vue如何进行动画的封装
2018/09/26 Javascript
Vue从TodoList中学父子组件通信
2019/02/05 Javascript
解决Layui数据表格显示无数据提示的问题
2019/11/14 Javascript
Python抓取京东图书评论数据
2014/08/31 Python
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python 直接赋值和copy的区别详解
2019/08/07 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
keras.utils.to_categorical和one hot格式解析
2020/07/02 Python
如何通过python计算圆周率PI
2020/11/11 Python
英国团购网站:Groupon英国
2017/11/28 全球购物
法国创作个性化T恤衫和其他定制产品平台:Tostadora
2018/04/08 全球购物
墨西哥皇宫度假村预订:Palace Resorts
2018/06/16 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/01/13 面试题
提拔干部考察材料
2014/05/26 职场文书
2014年业务工作总结
2014/11/17 职场文书
项目经理岗位职责范本
2015/04/01 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers