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

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

常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...进行实现。...class DetailView(generic.DetailView): # 指定要展示的数据类型 model = Question # 指定展示的模板页面 template_name...,继承了generic.ListView内置类,通过template_name指定了HTML视图,通过context_object_name指定了保存数据的变量,在get_queryset()函数中定义了数据的查询方式...视图对象的使用 经过上述的改造,我们可以看到视图处理函数已经变得非常的简洁,但是存在这样一个问题,IndexView处理类中的数据,我们可以看懂是通过get_queryset()函数进行查询的,然后自动复制给变量

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

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

    "/login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView 显示对象详情 文章详细页...方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...import DetailView from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.core.urlresolvers

    3.2K10

    基于 Django 的个人网站(4)

    上回说到,虽然已经基本上把显示的格式改的差不多了,但是界面还是不够美观,同时也没有实现分类页面和检索文章页面,今天我们先来实现分类页面和检索文章的页面。 ?...分类页面的实现 考虑到分类页面是一个用来展示属于当前类别的所有文章,和首页一样的格式,就是显示的列表项十有八九会比首页少,因此分类页面的视图直接继承首页的视图,然后重写 get_queryset 方法就完事了...,分类页面从逻辑上来说就已经实现了,可能会有排版和导包的问题,最后我会给出 views.py 的源码和 html 文件的源码,我们先不管了,接着去实现搜索页面,最后再一起测试。...——其实还是和主页面差不多,同样继承主页面对应的视图,然后重写 get_queryset 方法就完事了,代码如下: class SearchView(IndexView): def get_queryset...表单有了,视图有了,最后我们直接配置 URL,在 urlpatterns 列表中添加一项,代码如下: path('search/', SearchView.as_view()) 现在该实现的也基本全都实现了

    1.1K20

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

    方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...get_context_data(**kwargs):返回显示对象的上下文数据.这个方法的基本实现需要object属性被视图赋值(即使是None).它返回一个包含这些内容的字典: object:这个视图显示的对象...,ListView from django.utils import timezone from django.views.generic.detail import DetailView from

    2.9K40

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

    具体的实现我们以后会专门开辟一个专栏分析类视图的源代码,到时候就能看出 django 使用的魔法了)。...DetailView 除了从数据库中获取模型列表的数据外,从数据库获取模型的一条记录数据也是常见的需求。比如查看某篇文章的详情,就是从数据库中获取这篇文章的记录然后渲染模板。...对于这种类型的需求,django 提供了一个 DetailView 类视图。..., DetailView # 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的...因为类视图和函数视图是完全等价的,而且类视图具有代码复用等很多好处,所以以后一旦涉及视图,我们都会使用类视图来实现。

    1.3K20

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

    作者:Kuky_xs 博客:https://www.jianshu.com/p/8cdf099e974f 1 正文 《django入门:环境及项目搭建》 《django入门:数据模型》 《django入门...:视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图..., DetailView from django.shortcuts import get_object_or_404 from blog.models import Post # 获取相应模型下的全部数据...= 'post_list' # 该方法默认返回指定模型的全部数据,通过复写该方法,改变默认行为 def get_queryset(self): # 类视图中,...优化分页列表 最后我们列下 Paginator 常用属性结束 django 的入门教程,接下来会有 DRF 的入门教程,django 算是其基础吧,DRF 实现了前后端分离,刚好适合我这种 Android

    89120

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

    由于这种情况特别常见,Django 提供一种快捷方式,叫做“通用视图”系统。 通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。...让我们将我们的投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧的、不再需要的视图。 3.基于 Django 的通用视图引入新的视图。...): template_name = 'polls/index.html' context_object_name = 'latest_question_list' def get_queryset...return Question.objects.order_by('-pub_date')[:5] class DetailView(generic.DetailView): model =...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余的东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----

    80110

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

    它们采用某些常见的习语和在开发过 程中发现的模式然后把它们抽象出来,以便你能够写更少的代码快速的实现基础的视图。 我们能够识别一些基础的任务,比如展示对象的列表,以及编写代码来展示任何对象的 列表。...答案是派生DetailView,并且在get_context_data方法中提供你自己的实现。...默认的实现只是简单的 给模板添加了要展示的对象,但是你这可以这样覆写来展示更多信息: from django.views.generic import DetailView from books.models...相当方便的是, ListView 有一个get_queryset() 方法来供我们重写。在之前,它只是返回一个queryset属性值,但是现在我们可以添加更多的逻辑。...– 因此我们简单的 重写它并封装调用: from django.views.generic import DetailView from django.utils import timezone from

    1.4K40

    Django源码学习-8-ListView&DetailView通用视图

    Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?...import DetailView from django.views.generic.edit import ( CreateView, DeleteView, FormView, UpdateView...② DetailView:显示一个对象的某个属性详细信息 用于显示某一 Model 中的一个 object 的详细信息。...object; from django.views.generic import DetailView from books.models import Author # 当该页面被访问时,对 Model

    1.4K10

    Django 1.10中文文档-第一个应用Part4-表单和通用视图

    他们都具有类似的业务逻辑,实现类似的功能:通过从URL传递过来的参数去数据库查询数据,加载一个模板,利用刚才的数据渲染模板,返回这个模板。...): template_name = 'polls/index.html' context_object_name = 'latest_question_list' def get_queryset...这里使用两个通用视图:ListView和DetailView。这两个视图分别代表“显示对象列表”和“显示特定类型对象的详细信息页面”的抽象概念。 每个通用视图需要知道它将作用于哪个模型。...默认情况下,DetailView泛型视图使用一个称作/_detail.html的模板。...而对于DetailView,question变量会被自动提供,因为我们使用了Django的模型(Question),Django会智能的选择合适的上下文变量。

    2.4K40

    Django 1.10中文文档-第一个应用Part5-测试

    首先导入timezone模块,然后修改get_queryset()方法,如下: # polls/views.py from django.utils import timezone def get_queryset...测试DetailView 然而,即使未来发布的Question不会出现在index中,如果用户知道或者猜出正确的URL依然可以访问它们。...所以我们需要给DetailView视图添加一个这样的约束: # polls/views.py class DetailView(generic.DetailView): ......其实还有很多工作可以做,还有一些非常有用的工具可用于实现一些非常聪明的事情。...如果你有一个复杂的应用,你可能为了实现持续集成,想在每次提交代码前对代码进行自动化测试,让代码自动至少是部分自动地来控制它的质量。 发现你应用中未经测试的代码的一个好方法是检查测试代码的覆盖率。

    1K60
    领券