我们在开发网站的过程中,有一些视图函数虽然处理的对象不同,但是其大致的代码逻辑、最终的目的都是一样的。 比如博客,通常其首页都是文章列表以及siderbar里的文章分类、推荐阅读、标签等等。 对处理首页的视图函数来说,是从数据库取出文章进行分页再返还给前端显示。这样一来代码就会有很多冗余,并且可读性也不是很高。

不过幸好,Django帮我们把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Class Based View)。

使用类视图是 Django 推荐的做法,而且熟悉了类视图的使用方法后,能够大幅度减少视图函数的重复代码,节省开发时间。接下来我就大概说一下类视图中ListView和DetailView的使用方法

  1. ListView
    通常我们会在博客首页的视图函数里这样写
from .models import Article # 引入博文类 def index(request): # 从数据库中取出博文并按发表时间倒序排列 posts = Article.objects.all().order_by('-created_time') paginator = Paginator(_posts, 5) # 每页五篇博文 posts = paginator.page(1) #取出第一页交给模板渲染 return render(request, 'index.html', context={'posts':posts}) 

然后前端中一个for循环就完了
我们再来看看类视图中ListView是怎样做的,对比一下

from .models import Article # 引入博文类
from django.views import generic # 引入通用视图类 class IndexView(generic.ListView): # 继承ListView model = Article # 你要查询的模型名 template_name = 'index.html' # 要渲染的模板 context_object_name = 'posts' # 与上面context中的posts对应 paginate_by = 5 # 每页五篇博文

两个对比之后,很明显第二个ListView更加简明一点,我们ajax加载下一页时甚至可以直接继承IndexView类,获取下一页

  1. DetailView
    除了从数据库中取出模型列表的数据外,从数据库取出模型的一条记录数据也是常见的需求。比如获取某篇文章的详情,就是从数据库中取出这篇文章的记录然后渲染模板。 对于这种类型的需求,Django 提供了一个 DetailView 类。下面我们也用对比的方式来看
    一般写法
from .models import Article # 引入博文类 def get_article_detail(request,article_id): article = Article.objects.get(id=article_id) return render(request, 'detail.html', context={'article':article})

可以看到,DetailView和ListView基本就是大同小异
用类视图的方法可以简化代码,提高我们的开发效率

版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://blog.csdn.net/wsad861512140

Django中类视图ListView和DetailView的使用相关推荐

  1. Django通用视图ListView、DetailView、BaseListView使用方法

    DetailView django.views.generic.detail.DetailView 在执行此视图时,self.object将包含该视图所操作的对象. 该视图从以下视图继承方法和属性: ...

  2. Django类视图CBV扩展基类之通用显示视图ListView、DetailView

    前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...

  3. Django中类视图的几实现方式

    类视图 以函数的方式定义的视图称为函数视图,函数视图便于理解.但是遇到一个视图对应的路径提供了多种不同HTTP请求方式的支持时,便需要在一个函数中编写不同的业务逻辑,代码可读性与复用性都不佳. 在Dj ...

  4. 类视图ListView和DetailView比较

    比较如下:

  5. django.views.generic通用视图的CreateView, ListView, UpdateView, DetailView, DeleteView用法

    导入: from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView 入坑指南 用 ...

  6. django:视图类之RedirectView、TemplateView、ListView、DetailView的源码与示例

    一,为什么需要视图类(Class Base Views) 面对功能和业务逻辑具有相同过程的需求时, 使用视图函数来完成的话,可能需要编写大量重复代码,而且视图函数过多时,不方便后期修护,所以djang ...

  7. TemplateView , ListView ,DetailView三种常用类视图用法

    有函数类图,还需要类视图??当然,类视图方便,好用,不信你感受感受.... TemplateView get_queryset(self)#默认取出该表所有数据.想要过滤自定义只能在get_query ...

  8. django通用视图(CBV)

    1. 介绍 Django提供了很多通用的基于类的视图(Class Based View),来帮我们简化视图的编写.这些View与上述操作的对应关系如下: 展示对象列表(比如所有用户,所有文章)- Li ...

  9. Django CBV视图

    注明 本笔记主要参考<Django应用开发实战><Django企业开发实战>,这两本书前者详细,后者精炼.学习之后真的是感觉自己进步了很多.值得一读 文章目录 注明 前言 一. ...

最新文章

  1. 使用面向 iOS 的本机插件扩展 PhoneGap
  2. 关于DWG文件转换成PDF
  3. Windows 7中200M神秘隐藏分区
  4. 为什么引入验证集来评估机器学习模型?只用训练集和测试集可以吗?
  5. 设计模式之简单工厂模式学习笔记
  6. java8函数式编程 视频_快速掌握Java8 Stream函数式编程技巧
  7. LaTeX文档插入图片的几种常用方法
  8. HDU - 5371 Hotaru's problem(马拉车+暴力)
  9. d3.js(相当于svg的JQ)
  10. php 将颜色透明度,css中如何使颜色透明度
  11. 第12篇:Flowable-BPMN操作流程之用户任务UserTask
  12. 为什么整数在python中表示d_python中整数的缓存机制
  13. iPhone13系列售价曝光:4535元起售;微信暂停个人帐号新用户注册;Android 12 Beta 3.1发布|极客头条...
  14. 基于51单片机和GPS的经纬度时间速度航向系统设计定位电子罗盘原理图程序设计
  15. java retainAll
  16. 可用等式为:html+java=jsp表示jsp[8]._在 JSP 中 , 对 jsp:setProperty 标记描述正确的是 ()_学小易找答案...
  17. 触动精灵mysql用法教程_触动精灵如何使用 触动精灵脚本编写教程攻略大全
  18. Matlab LZW编码
  19. 阿里云OSS对象存储搭建网盘教程
  20. Android长图文截图的实现(支持截取第三方app)-(一)

热门文章

  1. git中查看全部分支的命令
  2. chain.doFilter()
  3. 爬取网页动态加载的评论
  4. 超有范,使用飞桨paddleHub抠图制作任意形状的词云(学习心得)
  5. Linux环境配置jdk
  6. 事物并发读写的可能:幻影读-不可重复读-脏读
  7. 维特智能激光测距仪VL53-400S_stm32f1驱动代码解析
  8. DELPHI ClientData使用详解
  9. 常识性概念图谱建设与应用
  10. docker 删除缓存