, 博主用django视图函数, 写了三套独立的视图函数处理页面(很简单就完成了, 感觉很机智...)...行 用类取代视图函数的逻辑非常简单, 两步就能搞定 第一步: 改写路由映射, 通过路由, 把 语言参数传进去 原urls: from django.conf.urls import url from ....name="en_index") ] 修改后的urls(通过as.view()将Index作为视图处理函数使用, 并传入lang参数): from django.conf.urls import url...import render from django.views.generic import ListView class Index(ListView): lang = "" def...django要用类来减少视图函数的重复书写的观点...
现在,让我们来创建一个 Django 视图来处理提交的数据。 记得吗?在 教程 第3部分 中,我们为 polls 应用创建了一个 URLconf 配置中包含有这一行代码: url(r'^(?...此函数有助于避免在视图中硬编码 URL 的功能。它指定了我们想要的跳转的视图函数名以及视图函数中 URL 模式相应的可变参数。...django.views.generic import DetailView, ListView from polls.models import Poll urlpatterns = patterns...('', url(r'^$', ListView.as_view( queryset=Poll.objects.order_by('-pub_date')...同样的,~django.views.generic.list.ListView 通用视图使用的默认模板名为 /_list.html ;我们指定了 template_name 参数告诉
我们可以把这些操作逻辑写在一个直观的 Python 函数里,但是 Django 开发者们意识到很多视图函数中的逻辑代码都是重复和通用的,因此在较早的版本中,Django 便开始引入 Class-based...(可理解为最终用于 Django URL Pattern 设置中的视图函数)。...例如 ContextMixin 及其子类负责获取渲染模板所需的模板变量;MultipleObjectMixin 负责从数据库获取模型对应的多条数据;View 负责处理 HTTP 请求(如 get 请求,...各个类组合在一起就构成了功能完整的 ListView。...| TemplateResponseMixin --> SingleObjectTemplateResponseMixin - + 总结起来就是一个类提供一个视图所需的功能
始终显示第一页和最后一页 当前页码高亮显示 显示当前页码前后几个连续的页码 如果两个页码号间还有其它页码,中间显示省略号以提示用户 类视图 ListView 由于在开发网站的过程中,有一些视图函数虽然处理的对象不同...于是 Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图。本文将使用到通用视图 ListView。...所以我们直接使用 ListView 而不是自己写分页逻辑,以达到代码复用的目的。 ListView 的使用非常简单,只需要将你自己的视图继承 ListView ,然后复写一些属性和方法即可。...'), ... ] url 函数接收的一个参数是一个正则表达式,用于匹配用户请求的 URL 模式。...因此我们的思路是,在视图里将以上七步中所需要的数据生成,然后传递给模板在模板中渲染显示就行。整个视图的代码如下,代码实现的功能已有详细注释,就不在文章中进一步说明了。
将 index 视图函数改写为类视图 针对这种从数据库中获取某个模型列表数据(比如这里的 Post 列表)的视图,Django 专门提供了一个 ListView 类视图。...blog/views.py from django.views.generic import ListView class IndexView(ListView): model = Post...='index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...下面我们就来将 detail 视图函数转换为等价的类视图 PostDetailView,代码如下: blog/views.py from django.views.generic import ListView
URL,代码如下: from django.contrib import admin from django.urls import path, include from django.conf import...我们可以发现按钮太少了,连代码块都没有,只不过仔细观察 CKEDITOR_5_CONFIGS 可以发现里面一共有两个设置,一个是 default,一个是 extends,默认用的是 default,很明显...from django.shortcuts import render from django.views.generic import ListView from.models import Article...主页面完成了,接下来我们就去编写文章详情页面,首先是打开 personal_website\views.py 去编写文章详情页面视图,代码如下: from django.shortcuts import...render from django.views.generic import DetailView, ListView from.models import Article # Create your
后面会详细讲解Django每一部分的使用方式和API了 本节内容 内置视图处理对象的定义 内置视图处理对象的使用 源代码分析 1....常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...我们改造polls/views.py视图模块如下: from django.shortcuts import render, get_object_or_404 from django.http import...源码分析 此时,会有个问题困扰着我们,为什么要继承视图处理类,为什么要继承不同的处理类ListView和DetailView?...这个问题就对了,我们看看Django源代码 首先查看ListView class ListView(MultipleObjectTemplateResponseMixin, BaseListView):
将 index 视图函数改写为类视图 针对这种从数据库中获取某个模型列表数据(比如这里的 Post 列表)的视图,Django 专门提供了一个 ListView 类视图。...blog/views.py from django.views.generic import ListView class IndexView(ListView): model = Post...'index'), ... ] 前面已经说过每一个 URL 对应着一个视图函数,这样当用户访问这个 URL 时,Django 就知道调用哪个视图函数去处理这个请求了。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...下面我们就来将 detail 视图函数转换为等价的类视图 PostDetailView,代码如下: blog/views.py from django.views.generic import ListView
作者:Kuky_xs 博客:https://www.jianshu.com/p/8cdf099e974f 1 正文 《django入门:环境及项目搭建》 《django入门:数据模型》 《django入门...:视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图...1.创建视图类 import markdown from django.shortcuts import render from django.views.generic import ListView...类来进行修改 class HomeView(ListView): model = Post # 指定视图模型 template_name = 'blog/home.html' # 指定渲染的模版...详情界面 有时候如果我们的数据过多,同一页加载全部数据,用户的体验肯定不好,我们通过通用视图类来创建分页,这边为了方便显示,我们会设置每页加载一篇文章 3 通过 ListView 创建分页 1.指定
(ListView): model = Publisher 最后将视图解析到你的url上: # urls.py from django.conf.urls import url from books.views...在一个通用视图上的context_object_name属性指定了要使用的定了上下文变量: # views.py from django.views.generic import ListView from...视图:: # views.py from django.shortcuts import get_object_or_404 from django.views.generic import ListView...首先,我们需要添加作者详情页的代码配置到URLconf中,指向自定义的视图: from django.conf.urls import url from books.views import AuthorDetailView...如果你想要调用参数组的其它方法,你可以在视图上设置pk_url_kwarg。详见 DetailView参考。
(library) $ python manage.py migrate 传统Django中的每个网页都需要多个文件:视图,URL和模板。 但是首先我们需要一个数据库模型,所以让我们从这里开始。...) 这就是我们所需要的!...image-20200916021124065 我们传统的Django项目现在有数据,但是我们需要一种将其公开为网页的方法。 这意味着创建视图,URL和模板文件。 现在开始吧。...('', BookListView.as_view(), name='home'), ] 我们导入视图文件,在空字符串''处配置BookListView,并添加命名URL主页作为最佳实践。...在此视图文件中,Book模型与ListView一起使用以列出所有书籍。 最后一步是创建我们的模板文件,以控制实际网页上的布局。 我们已经在视图中将其名称指定为book_list.html。
1、通用视图 urls.py: from django.views.generic import TemplateView path(r'about/',TemplateView.as_view(template_name...="about.html")), 2、通用视图 about.html xx/templates/about.html 3、List obj的通用视图 urls.py: from django.views.generic...import ListView from blog.models import BlogPost path(r'bloglist/',ListView.as_view(template_name='...bloglist.html',model=BlogPost)), 4、List obj的通用视图bloglist.html:默认list名为object_list {% for dr in object_list...from django.views.generic import ListView class IndexView(ListView): template_name = "blog/index.html
在阅读本篇之前,请记住一点「基于类的视图不会替代基于函数的视图」. 介绍 无论是类视图还是基于函数的视图, 最终绑定到 URL Conf 的都是函数. 为什么这么说?...如上面代码所示, 当我们把视图绑定到 url conf 时使用的 as_view 挂载其实返回的是一个函数....你可以直接使用它们来加快开发的过程,以下是可用视图的概述: 基础视图 View (最基本的View) TemplateView RedirectView 通用展示视图 ListView DetailView...例如我想实现一个博客, 对首页展示博客的列表, 我只需要适用一个通用视图ListView并覆盖其 queryset 属性即可大功告成....Django 官方的建议是: 如果你难以将自己的视图实现为通用视图(重点是generic views)的子类, 那么你直接使用基于 View 的视图或功能视图, 只编写你所需的代码更更加有效.
Django源码学习-7-View 视图函数 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...Django的通用视图可以减少开发的单调性,它抽象出一些在视图开发中常用的代码和模式,这样就可以在无需编写大量代码的情况下,快速编写出常用的视图函数。 ?..., ) from django.views.generic.list import ListView __all__ = [ 'View', 'TemplateView', 'RedirectView...from django.views.generic import ListView from books.models import Publisher class PublisherList(ListView
这里 Django 的官方文档中给出了一个在视图函数中对列表进行分页的示例,这个视图函数获取一个联系人列表并对其分页: from django.core.paginator import Paginator...回顾在 Django 官方推荐的姿势:类视图[6] 中的内容,我们已将视图函数转换成了类视图。...而类视图 ListView 已经帮我们写好了上述的分页逻辑,我们只需通过指定 paginate_by 属性来开启分页功能即可,即在类视图中指定 paginate_by 属性的值: blog/views.py...另外还要注意一点,请求哪一个页面通过 page 查询参数传递给 django 视图,django 会根据 page 的值返回对应页面的文章列表,所以上一页和下一页超链接的 href 属性指向的 url...,中间可能还有省略号的效果,表示还有未显示的页码。
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。...1.1 View django.views.generic.base.View是主要的类视图,所有的类视图都是继承自他。如果我们写自己的类视图,也可以继承自他。...TemplateView django.views.generic.base.TemplateView,这个类视图是专门用来返回模版的。...在Django中可以使用ListView来帮我们快速实现这种需求。...他们在Django中的路径为django.core.paginator.Paginator和django.core.paginator.Page。
,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多。...这种方式清除缓存的话使用: from django.core.cache import cache cache.clear() 视图缓存 这种方式会指定要缓存的视图,只会缓存这个视图, from django.views.decorators.cache...也可以在路由url.py中指定要缓存的页面: from django.views.decorators.cache import cache_page urlpatterns = [ url(...r'^foo/([0-9]{1,2})/$', cache_page(60 * 15)(my_view)), #也可以这样,如果你的视图是classbase的话: url(r'^$',...视图缓存的清除方式: 在django中可以使用cache_page的方式来缓存视图,但是如何删除指定视图的缓存呢?
如果你只是修改基于类的视图的一些简单属性,你可以将它们直接传递给as_view()方法调用: from django.conf.urls import url from django.views.generic...TemplateView是一个类不是一个函数,所以我们将URL 指向类的as_view()方法,它让基于类的视图提供一个类似函数的入口: # urls.py from django.conf.urls...我们在URLconf 中映射URL 到书籍列表视图: from django.conf.urls import url from books.views import BookListView urlpatterns...= [ url(r'^books/$', BookListView.as_view()), ] 下面是这个视图: from django.http import HttpResponse from...django.views.generic import ListView from books.models import Book class BookListView(ListView):
为此,我们将为注销链接定义一个URL模式,编写一个视图函数, 并在base.html中添加一个注销链接。 1....链接到注销视图 现在我们需要添加一个注销链接。...我们将使用Django提供的表单UserCreationForm, 但编写自己的视图函数和模板 1....login_required()的代码检查用户是否已登录,仅当用户已登录时,Django才运行topics() 的代码。如果用户未登录,就重定向到登录页面。.../login/' 现在,如果未登录的用户请求装饰器@login_required的保护页面,Django将重定向到 settings.py中的LOGIN_URL指定的URL。
Django源码学习-8-ListView&DetailView通用视图 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...视图负责接受一个 HttpRequest,并返回 HttpResponse 或 抛出异常(Http404)。...from django.views.generic import ListView ListView 通过重写queryset, template_name和context_object_name来完成...import ListView class PublisherBookList(ListView): template_name = 'books/books_by_publisher.html
领取专属 10元无门槛券
手把手带您无忧上云