当前位置: 首页 > 编程笔记 >

Django的ListView超详细用法(含分页paginate)

朱阳晖
2023-03-14
本文向大家介绍Django的ListView超详细用法(含分页paginate),包括了Django的ListView超详细用法(含分页paginate)的使用技巧和注意事项,需要的朋友参考一下

开发环境:

  • 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用法内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!

 类似资料:
  • 我是Django初学者,所以我被困在基于类的分页中,我已经关注了很多关于分页的帖子,但不幸的是,我无法解决这个错误。 如果我在搜索框中搜索“爱”,URL就会变成这样 http://127.0.0.1:8000/search/?q=love 结果显示了分页功能,但当我点击下一个分页按钮时,查询get remove,url变成这样 http://127.0.0.1:8000/search/?page=

  • 问题内容: 如何在Django 1.3中使用分页? 该文档对此不是很清楚。 我views.py怎么了? 我的模板如何处理? URLconf文件中有什么内容? 问题答案: 我认为你需要有关将分页与基于新类的视图一起使用的信息,因为使用基于传统函数的视图很容易找到。我发现仅通过设置变量就足以激活分页。请参见基于类的通用视图。 例如,在你的: 在你的模板(),你可以包括这样的分页部分(我们有一些情境变量

  • 主要内容:一、前情提示,二、ack机制回顾,三、ack机制实现原理:delivery tag,四、RabbitMQ如何感知到仓储服务实例宕机,五、仓储服务处理失败时的消息重发,六、阶段总结一、前情提示 生产者投递出去的消息,可能会丢失,丢失的原因有很多,比如消息在网络传输到一半的时候因为网络故障就丢了,或者是消息投递到MQ的内存时,MQ突发故障宕机导致消息就丢失了。 针对这种生产者投递数据丢失的问题,RabbitMQ实际上是提供了一些机制的。 比如,有一种重量级的机制,就是事务消息机制。采用类事

  • 本文向大家介绍php实现分页功能的详细实例方法,包括了php实现分页功能的详细实例方法的使用技巧和注意事项,需要的朋友参考一下 分页效果在网页中是常见的,可是怎样才能实现分页呢,今天做了两种方法来实现一下分页的效果。 首先,我们需要准备在数据库里面准备一个表,并且插入数据,这些都是必需的前提工作了,不多说,如图所示(库名为jereh,表名为n_content): 步骤分析: 我们需要分页的话,需要

  • 本文向大家介绍超详细的javascript数组方法汇总,包括了超详细的javascript数组方法汇总的使用技巧和注意事项,需要的朋友参考一下 一、数组的常用方法 1:join(); 将数组转为字符串显示。不输入参数,默认以逗号连接;输入参数,则以参数连接。 原数组不变。 2:reverse(); 将数组逆序排列,原数组被修改。 3:sort(); 默认按升序排列数组项,调用每个数组项的toStr

  • 本文向大家介绍Django实现简单分页功能的方法详解,包括了Django实现简单分页功能的方法详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Django实现简单分页功能的方法。分享给大家供大家参考,具体如下: 使用django的第三方模块django-pure-pagination 安装模块: 将'pure_pagination'添加到settings.py文件中 在view.py文