首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于类的通用视图:ListView 和 DetailView

对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的。首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...于是,Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Class Based View)。...使用类视图是 Django 推荐的做法,而且熟悉了类视图的使用方法后,能够减少视图函数的重复代码,节省开发时间。接下来就让我们把博客应用中的视图函数改成基于类的通用视图。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...这部分对应着 detail 视图函数中生成评论表单、获取 post 下的评论列表的代码部分。这个方法返回的值是一个字典,这个字典就是模板变量字典,最终会被传递给模板。

2.6K70

Django 官方推荐的姿势:类视图

对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...于是,django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Generic Class Based View)。...使用类视图是 django 推荐的做法,熟悉了类视图的使用方法后,能够减少视图函数的重复代码,节省开发时间。接下来就让我们把博客应用中的视图函数改成基于类的通用视图。...然后就是通过一些属性来指定这个视图函数需要做的事情,这里我们指定了三个属性: model:将 model 指定为 Post,告诉 django 我要获取的模型是 Post。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。

1.3K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Django内置的通用类视图及实例

    方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...执行这个视图的时候,self.object将包含视图正在操作的对象....get_context_data(**kwargs):返回显示对象的上下文数据.这个方法的基本实现需要object属性被视图赋值(即使是None).它返回一个包含这些内容的字典: object:这个视图显示的对象...显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用从对象模型自动生成的表单(除非手动制定表单类)....context_object_name = 'employee_detail' #指定获取的模型列表数据保存的变量名。这个变量会被传递给模板。

    2.9K40

    Django内置的通用类视图CBV及示例

    django自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 将访问"/log-in/"的用户重新定向到...方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...执行这个视图的时候,self.object将包含视图正在操作的对象....显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....context_object_name = 'employee_detail' #指定获取的模型列表数据保存的变量名。这个变量会被传递给模板。

    3.2K10

    基于django的视频点播网站开发-step4-首页功能

    开发思路 开发一个功能的基本思路是:先新建应用,然后分析功能涉及到哪些业务,从而分析出需要的数据库字段,然后编写模型,之后就是展示阶段,通过url路由配置视图函数,来将模型里面的数据显示出来。...,可以传一些额外内容到模板。...c={{ item.id }} 这里用c代表分类的id,点击后,会传到视图类中,在视图类中,我们使用 get_queryset() 函数,将get数据取出来。...当拿到页码列表,我们继续改写get_context_data()函数。 将获取到的classification_list追加到context字典中。...更加详细的介绍,可参考官方。 当数据传递给模板之后,模板就负责显示出来就行了。

    1.4K41

    Python-Django

    假设用户要访问某篇文章,它会自动解析 blog:detail 这个视图函数对应的 url,并且把 article.pk(文章的主键)传递给detail视图函数,details就是我们在blog/urls.py...] # 新增 get_absolute_url 方法 def get_absolute_url(self): # 这里 reverse 解析 blog:detail 视图函数对应的...('created_time', 'month', order='DESC') # 获取到降序排列的精确到月份且已去重的文章发表时间列表 # 并把列表转为一个字典,字典的键为年份...[d.year].append(d.month) # 模板不支持defaultdict,因此我们把它转换成一个二级列表,由于字典转换后无序,因此重新降序排序 return...在模板文件中我们可以这样使用,views.py中已经指定了context_object_name = "article_list",并且已经在get_queryset()中进行了markdown处理

    73420

    django 入门:通用视图类重构视图

    :视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图...1.创建视图类 import markdown from django.shortcuts import render from django.views.generic import ListView...,通过复写该方法,改变默认行为 def get_queryset(self): # 类视图中,从 url 捕获的命名组参数值保存在实例的 kwargs 中,是一个字典...,为模版变量字典,传递给相应的模版 def get_context(self, **kwargs): context = super(PostDetailView, self)....详情界面 有时候如果我们的数据过多,同一页加载全部数据,用户的体验肯定不好,我们通过通用视图类来创建分页,这边为了方便显示,我们会设置每页加载一篇文章 3 通过 ListView 创建分页 1.指定

    89120

    Django之视图层与模板层

    一、视图层 视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应....) 你需要加一个safe参数 return JsonResponse(l,safe=False) 1.4FBV与CBV Django的视图层由两种形式构成:FBV基于函数的视图(Function...base view)和CBV基于类的视图(Class base view) 1.4.1FBV 我们前面使用的视图函数就是FBV。...模板传值 1.传函数名:{{ 函数名 }} 给HTML传函数名的时候,模板语法会自动加括号调用该函数,并将函数的返回值当做页面展示的依据,注意模板语法不支持函数传参,也就是说只能给页面传无参函数。...2.传类名:{{ 类名 }} 给HTML传类名的时候会自动加括号实例化产生对象,在HTML页面可以进行如下对对象的使用。

    9.2K10

    Django来敲门~第一部分【9.使用Django内置视图处理对象简化开发】

    内置视图处理对象的定义 对于我们视图处理函数,从最原始的HttpResponse()来进行页面数据的输出,到render()函数进行模板页面的操作,已经是可以满足我们的需求了,但是Django赶脚还不够...常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...,继承了generic.ListView内置类,通过template_name指定了HTML视图,通过context_object_name指定了保存数据的变量,在get_queryset()函数中定义了数据的查询方式...视图对象的使用 经过上述的改造,我们可以看到视图处理函数已经变得非常的简洁,但是存在这样一个问题,IndexView处理类中的数据,我们可以看懂是通过get_queryset()函数进行查询的,然后自动复制给变量...P\d+)/vote/$", views.vote, name="vote"), ] 这里路由配置的过程中,通过as_view()函数,会自动对目标视图类进行封装,将视图处理类中的

    90630

    django知识分支_1

    django知识分支 1.Cookie工作流程: 浏览器向服务器发出请求,服务器接收到浏览器的请求进行处理,服务器设置一个cookie发送给浏览器,浏览器将cookie保存,当需要再次登录的时候,浏览器将本地的...源码 说明 HttpResponse,HttpResponseRedirect,JsonResponse 类之间的关系 HttpResponse:是django的方法,返回格式为HttpResponse...如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。...表示url,作用:从url得到相互映射的url_name eg:resolve(to,*args,**kwargs) _get_queryset:该方法可以返回一个量身定制的对象列表 5.编写代码实现通用视图函数...View的get与post接口 一个简单的通用视图函数类 from django.views. generic import View from django.shortcuts import render

    35030

    Django源码学习-11-base.py

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...base.py 保存视图的抽象类,TemplateView和RedirectView,及工具类TemplateResponseMixin的代码; create_update.py 基于函数的通用视图;...date_based.py 基于函数的日期相关通用视图; dates.py 新的基于类的日期相关通用视图。...; list_detail.py 基于函数的列表、显示函数; simply.py 基于函数的工具常用工具视图。...抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图(RedirectView

    1.2K30

    django 1.8 官方文档翻译: 3-4-2 内建显示视图

    网站:http://python.usyiyi.cn/django/index.html 基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式。...这就是说,通用视图有一些限制。如果你将你的视图实现为通用视图的子类,你就会发现这样能够更有效地编写你想要的代码,使用你自己的基于类或功能的视图。...所有通用视图中有趣的特性来自于修改被传递到通用视图中的”信息” 字典。...然而,通过使用queryset来定义一个过滤的对象列表,你可以更加详细 的了解哪些对象将会被显示的视图中(参见执行查询来获取更多关于查询集对象的更对信息,以及参见 基于类的视图参考来获取全部 细节)。...详见基于类的视图参考。 动态过滤 另一个普遍的需求是在给定的列表页面中根据URL中的关键字来过滤对象。

    1.4K40

    Django学习笔记 1.4 表单和通用视图

    2.1 改良 URLconf 2.2 改良视图 小结 前言 这一节我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码。...这些视图反映基本的 Web 开发中的一个常见情况:根据 URL 中的参数从数据库中获取数据、载入模板文件然后返回渲染后的模板。...由于这种情况特别常见,Django 提供一种快捷方式,叫做“通用视图”系统。 通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。...让我们将我们的投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧的、不再需要的视图。 3.基于 Django 的通用视图引入新的视图。...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余的东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----

    80110

    重点内容回顾-DRF

    功能: 1.视图中request对象不再是Django中原始的HttpRequest类的对象,而是DRF框架封装的Request类的对象。...request.data保存的是解析之后的请求体的数据,并且已经解析成了字典或类字典,相当于包含Django原始request对象中的request.body/request.POST/request.FILES...request.query_params保存解析之后的查询字符串的数据,并且已经解析成了字典或类字典,相当Django原始request对象中的request.GET 2.响应时可以统一返回Response...数据库查询 属性: queryset(指定视图所使用的查询集) 方法: get_queryset返回视图所使用的查询集 get_object从视图所使用的查询集中查询指定的对象,默认根据pk进行查询。...过滤:需要先安装django-filter并进行注册设置,再在视图中通过 filter_fields设置过滤字段。

    2.5K20

    Python Day16 Django

    可选的要传递给视图函数的默认参数(字典形式) 一个可选的name参数 分组 NOTE: 1 一旦匹配成功则不再继续 2 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。...将调用函数views.month_archive(request, '2005', '03') 有名分组 上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图...在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。 在Python 正则表达式中,命名正则表达式组的语法是(?...代码+模板语法 模版包括在使用时会被值替换掉的变量,和控制模版逻辑的标签 模板语法之变量 渲染变量 {{ }} 举例1: 视图函数 def temp_func(request): l = [111...还可以在视图函数中建一个类的对象列表 然后引用这个列表 视图函数: def temp_func(request): class Person(object): def __init

    1.9K10

    拓展 Django Pagination 实现完善的分页效果

    本文将通过拓展 Django Pagination 来实现下图这样比较完善的分页效果。...首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。 于是 Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图。...第二个参数是被调用的视图函数,其类型必须是一个函数。而我们写的 IndexView 视图是一个类,为了将其转换成一个函数,只需要调用其父类中的 as_view 方法即可。...在类视图中,这个需要传递的模板变量字典是通过 get_context_data 获得的, 所以我们复写该方法,以便我们能够自己再插入一些我们自定义的模板变量进去。...""" # 首先获得父类生成的传递给模板的字典 context = super().get_context_data(**kwargs) # 父类生成的字典中已有

    2K60

    Django模板语言与视图(view)

    一个视图函数(类),简称视图,是一个简单的Python 函数(类)包含的是业务逻辑,它接受Web请求并且返回Web响应。   ...然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。   ...CBV(class based view)和FBV(function based view )   基于函数的view,叫FBV, 还可以把view写成基于类的.   ...CBV版添加装饰器 类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。

    3.4K20
    领券