导入:

from django.views.generic import CreateView, ListView, UpdateView, DetailView, DeleteView

入坑指南

用过django的人对视图函数并不陌生,generic 的通用视图用法很简单,所以在讲使用方法之前先讲几个个入坑指南吧。

坑1:这个坑主要在于参数“context_object_name",话不多说,直接入题:

在使用ListView和DeleteView的时候,如果你没有更改类视图中默认的context_object_name,一般不会出问题。但是如果更改了,请注意在不同的函数对应的模板中的参数使用。

在视图函数listView和list.html中传递的参数。

在视图函数deleteView和delete.html中传递的参数。

 坑2:No URL to redirect to. Either provide a url or define a get_absolute_url method on the Model.

原因:如果没有success_url

# 增加博客目录
class CheditorCategoryCreateView(LoginRequiredMixin, CreateView):model = ArticleCategorytemplate_name = 'cheditorBlog/category_create.html'fields = ['title']# 如果没有success_url,会报错No URL to redirect to.  Either provide a url or define a get_absolute_url method on the Model.success_url = reverse_lazy('blog:cheditorCategory_list')

使用详解

ListView

如果需要详细了解ListView的所有属性和方法,请参考:ListView -- Classy CBVhttp://ccbv.co.uk/projects/Django/2.2/django.views.generic.list/ListView/

ListView的使用方法其实很简单,基本只涉及三个文件:

views.py

from django.views.generic import ListViewclass NewsListView(LoginRequiredMixin, ListView):'''首页动态'''model = News# queryset = News.objects.all()     # 默认为queryset= News.objects.all()paginate_by = 20    # 每页显示多少条,url中的?page=# page_kwarg = 'p'    # 会用p代替page,一般不设置此参数context_object_name = "news_list"   # 默认为‘模型类名_list’或‘object_list’ordering = ("-created_at",)     # 可以有更多的排序规则template_name = 'news/news_list.html'   # 默认为“模型类名小写_list.html”def get_ordering(self):# return super(NewsListView, self).get_ordering()passdef get_paginate_by(self, queryset):passdef get_queryset(self):return News.objects.filter(reply=False)# def get_context_data(self, *, object_list=None, **kwargs):#     context = super(NewsListView, self).get_context_data()#     context['views'] = 100#     return context

urls.py文件

    path('', views.NewsListView.as_view(), name='list'),

html文件

<a class="nav-link" href="{% url 'news:list' %}">简书</a>

DeleteView

如果需要详细了解DeleteView的所有属性和方法,请参考:DetailView -- Classy CBV DetailView in Django 2.2. Render a "detail" view of an object.By default this is a model instance looked up from `self.queryset`, but theview will support display of *any* object by overriding `self.get_object()`. http://ccbv.co.uk/projects/Django/2.2/django.views.generic.detail/DetailView/

DeleteView的使用方法其实很简单,基本只涉及三个文件:

views.py文件,注意常用属性和方法

# 删除动态# 本功能除了用户登录以及删除功能外,还要有一个关键步骤:验证动态的发表者
# class NewsDeleteView(LoginRequiredMixin, UserRequiredMixin, DeleteView):
class NewsDeleteView(LoginRequiredMixin, DeleteView):model = Newstemplate_name = 'news/news_confirm_delete.html'# slug_url_kwarg = 'slug'     # 通过url传入要删除对象的主键id,默认值是slug# pk_url_kwarg = 'pk'     # 通过url传入要删除对象的主键id,默认值是pkmessage = '动态删除成功!'# success_url = reverse_lazy('news:list')     # 在项目URLConf未加载使用# 替代UserRequiredMixin方法确保验证是否为原作者,用于状态删除、文章编辑;def get_object(self, queryset=None):object = super(NewsDeleteView, self).get_object(queryset=queryset)if object.user.username != self.request.user.username:# if object.user != self.request.user:raise PermissionDenied# raise Http404()return objectdef get_success_url(self):# 来源:from django.contrib import messagesmessages.success(self.request, self.message)return reverse_lazy('news:list')

urls.py文件,注意带参数pk

    path("delete/<str:pk>", views.NewsDeleteView.as_view(), name="delete_news"),

htmls文件中的应用,注意带参数pk

<form method="post" action="{% url 'news:delete_news' news.pk %}">{% csrf_token %}<button class="btn btn-danger mr-5" type="submit">删除</button>
</form>

django.views.generic通用视图的CreateView, ListView, UpdateView, DetailView, DeleteView用法相关推荐

  1. 深入Django(1): 通用视图 (generic views)

    如果对Django的基础部分尚不熟悉,请参考<Django实战>系列. 内容提要 1. 回顾Django的视图函数(view function) 2. 在视图函数中使用模板 3. 简化视图 ...

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

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

  3. django通用视图(CBV)

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

  4. django 1.8 官方文档翻译: 3-4-2 基于类的内建通用视图

    基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式. Django尝试从model和 template层移除一些单调的情况,但是Web开发者依然会在view(视图)层经历 ...

  5. Python Django CBV下的通用视图函数

    ListView TemplateView DetailView 之前的代码实例基本上都是基于FBV的模式来撰写的,好处么,当然就是简单粗暴..正如: def index(request):retur ...

  6. Django 学习小组:基于类的通用视图详解(一)

    通过三周的时间我们开发了一个简单的个人 Blog,教程地址: 第一周:Django 学习小组:博客开发实战第一周教程 -- 编写博客的 Model 和首页面 第二周:Django 学习小组:博客开发实 ...

  7. Django 基于类的通用视图详解

    原文出处:https://segmentfault.com/a/1190000005685454 Django 学习小组:基于类的通用视图详解(一) 通过三周的时间我们开发了一个简单的个人 Blog, ...

  8. django通用视图(视图类)的login登陆、权限限定

    django的登陆限定和权限限定是view设计中很重要的一个组成.网上的教程大部分都是通过使用view函数的装饰器来实现,比如: @login_required(login_url='/') @per ...

  9. Django 2.1.3 视图层 内置CBV通用视图

    内置的基于类的通用视图 1. 扩展通用视图 2. 对象的通用视图 3. 制作"友好"的模板上下文 4. 添加额外的上下文 5. 查看对象的子集 6. 动态过滤 7. 执行额外的工作 ...

最新文章

  1. 跳跃游戏(判断是否可以跳到最后一个下标)
  2. 最近想问题想的睡不着,上来郁闷下!
  3. python 生成pdf收据_python如何与以太坊交互并将区块链信息写入SQLite
  4. DCMTK:读取DICOM图像,并使用设置创建PGM位图
  5. html5 居中 字体 字号,css字体水平居中
  6. JAVA系统和DOMINO通过LDAP集成方
  7. 《篡权的ss》-linux命令五分钟系列之三十一
  8. python requests返回值为200 但是text无内容_接口测试入门神器 - Requests
  9. 通俗易懂理解Attention机制
  10. Pytorch——计算机视觉工具包:torchvision
  11. 基于Java实现宠物领养救助交流平台设计和实现
  12. 处理不连续单元格,如sum,sumif,countif
  13. 下载igs对流层延迟(ZTD)产品
  14. P1548 [NOIP1997 普及组] 棋盘问题
  15. 你不知道的京东数据库运维自动化体系建设之路
  16. windows 7z命令行压缩
  17. @kubernetes(k8s) 应用配置管理(ConfigMap、subPath、Secret)
  18. ubuntu下无线网络网速缓慢问题解决
  19. 用Python写一个量化交易策略
  20. 20201113--工具总结

热门文章

  1. U盘超级加密3000忘记密码该怎么办?
  2. ALIENTEK所有开发板的FreeRTOS教程和例程
  3. 网易射击手游堡垒前线明日上线:创造加吃鸡模式你喜欢吗?
  4. 某某钞星只能录入,不能粘贴问题
  5. vae 实现_使用tensorflow 2和tensorflow概率实现vae的6种不同方式
  6. 2019暑期组队排位总结
  7. 回收小程序是什么?有什么特点?
  8. 【OpenGL】多重采样案例MSAA
  9. 实测:360极速浏览器在内存控制上完胜Edge
  10. 原码、反码、补码都是有符号定点数的表示方法。