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中scatter函数参数及用法详解
Nov 08 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
matplotlib作图添加表格实例代码
Jan 23 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python实现指定字符串补全空格、前面填充0的方法
Nov 16 Python
关于python3中setup.py小概念解析
Aug 22 Python
Python 使用多属性来进行排序
Sep 01 Python
python pycharm的安装及其使用
Oct 11 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
Mar 06 Python
使用Python判断一个文件是否被占用的方法教程
Dec 16 Python
Python读取文件夹下的所有文件实例代码
Apr 02 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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 adodb操作mysql数据库
2009/03/19 PHP
深入探讨PHP中的内存管理问题
2011/08/31 PHP
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
JS获取节点的兄弟,父级,子级元素的方法
2014/01/09 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
js/jq仿window文件夹框选操作插件
2017/03/08 Javascript
JQuery 进入页面默认给已赋值的复选框打钩
2017/03/23 jQuery
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
JavaScript数组排序reverse()和sort()方法详解
2017/12/24 Javascript
浅谈Webpack核心模块tapable解析
2018/09/11 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
2020/10/27 Javascript
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python版本的读写锁操作方法
2016/04/25 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)
2019/06/28 Python
Html5如何唤起百度地图App的方法
2019/01/27 HTML / CSS
比利时买床:Beter Bed
2017/12/06 全球购物
澳大利亚现代波西米亚风格女装网站:Bohemian Traders
2018/04/16 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
助理政工师申报材料
2014/06/03 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
蓬莱阁导游词
2015/02/04 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
入党转正申请自我鉴定
2019/06/25 职场文书