开发环境 django 1.11 DetailView 的相关源码 # .....This'll get passed as the queryset to DetailView.get_object, # which'll handle the 404...return obj 看了源码发现 get_object,就是返回 单一的对象,相当于 return YouModel.objects.get(pk='pk') 重写 generic.DetailView...里面的 get_object class DetailView(generic.DetailView): model = Article # 模型名称 template_name =...= cache.get("article_obj_%s" % pk) # 获取该主键的缓存 if not obj: # 如果没有就 obj = super(DetailView
pass ① ListView:显示对象列表 用于展示一个 Model 里面的所有对象,也可以是其子集 (queryset) ,支持分页。...② DetailView:显示一个对象的某个属性详细信息 用于显示某一 Model 中的一个 object 的详细信息。...用属性 model 或 queryset 指定要操作的 Model 或 queryset; DetailView 会根据 URLConf 中的 或 筛选出一个...object; from django.views.generic import DetailView from books.models import Author # 当该页面被访问时,对 Model...做出额外的工作 class AuthorDetailView(DetailView): queryset = Author.objects.all() def get_object
question_list,那么后面的DetailView和ResultView中的数据是怎么来的呢?...源码分析 此时,会有个问题困扰着我们,为什么要继承视图处理类,为什么要继承不同的处理类ListView和DetailView?...`self.queryset` can actually be any iterable of items, not just a queryset. """ ...... class MultipleObjectMixin...The return value must be an iterable and may be an instance of `QuerySet` in which case `QuerySet...接下来,我们继续看DetailView是怎么操作的吧 class DetailView(SingleObjectTemplateResponseMixin, BaseDetailView): "
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 =...Question template_name = 'polls/detail.html' class ResultsView(generic.DetailView): model...= Question template_name = 'polls/results.html' generic.DetailView 代表
答案是派生DetailView,并且在get_context_data方法中提供你自己的实现。...然而,model参数并不是唯一能够指明视图要基于哪个对象进行操作的方法 – 你同样可以使用queryset参数来指定一个对象列表: from django.views.generic import DetailView...' queryset = Publisher.objects.all() 指定model = Publisher等价于快速声明的queryset = Publisher.objects.all(...相当方便的是, ListView 有一个get_queryset() 方法来供我们重写。在之前,它只是返回一个queryset属性值,但是现在我们可以添加更多的逻辑。...详见 DetailView参考。
path('search', views.SearchView.as\_view(), name='search'), path('detail/', views.DetailView.as...self.duration,6) context['record\_count'] = self.record\_count return context def get\_queryset...start self.record\_count = len(search\_list) return search\_list 继承了ListView通用类,通过get_queryset...详情页 我们再来开发详情页,从urls.py中看到,详情页是由DetailView来实现的,我们来窥探它的全貌: class DetailView(generic.DetailView): model...= Link template\_name = 'app/detail.html' def get\_object(self, queryset=None):
().filter(category=cate) 和 IndexView 不同的地方是,我们覆写了父类的 get_queryset 方法。...然后我们调用父类的 get_queryset 方法获得全部文章列表,紧接着就对返回的结果调用了 filter 方法来筛选该分类下的全部文章并返回。...DetailView 除了从数据库中获取模型列表的数据外,从数据库获取模型的一条记录数据也是常见的需求。比如查看某篇文章的详情,就是从数据库中获取这篇文章的记录然后渲染模板。...对于这种类型的需求,Django 提供了一个 DetailView 类视图。...# 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的 model = Post
方法: get_queryset(self) :返回视图使用的查询集,主要用来提供给Mixin扩展类使用,是列表视图与详情视图获取数据的基础,默认返回queryset属性,可以重写 get_object...P\d+)', views.Book2DetailView.as_view()), ] views.py : class Book2View(GenericAPIView): # queryset...要传queryset对象,查询了所有的图书 # serializer_class使用哪个序列化类来序列化这堆数据 queryset = Book.objects # queryset...P\d+)', views.Book3DetailView.as_view()), ] views.py : from rest_framework.mixins import ListModelMixin...,DestroyAPIView): class Book4DetailView(RetrieveUpdateDestroyAPIView): queryset = Book.objects
"/log-in/"的用户重新定向到"/login/" TemplateView 显示Django HTML template 一般网站中使用模板显示的页 ListView 显示对象列表 文章列表页 DetailView...get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...import TemplateView,ListView from django.utils import timezone from django.views.generic.detail import DetailView
context['c'] = self.c context['page_list'] = page_list return context def get_queryset...来实现的,我们来窥探它的全貌:class DetailView(generic.DetailView): model = Product template_name = 'app/detail.html...' def get_object(self, queryset=None): obj = super().get_object() return obj def...get_context_data(self, **kwargs): context = super(DetailView, self).get_context_data(**kwargs)...return context它很简单,继承了DetailView通用模板类来显示详情。
context['c'] = self.c context['page_list'] = page_list return context def get_queryset...来实现的,我们来窥探它的全貌: class DetailView(generic.DetailView): model = Product template_name = 'app/detail.html...' def get_object(self, queryset=None): obj = super().get_object() return obj...def get_context_data(self, **kwargs): context = super(DetailView, self).get_context_data(**kwargs...) return context 它很简单,继承了DetailView通用模板类来显示详情。
注意这里我们使用的是类视图,类视图的内容具体请参考 基于类的通用视图:ListView 和 DetailView。...def get_object(self, queryset=None): # 覆写 get_object 方法的目的是因为需要对 post 的 body 值进行渲染 post...= super(PostDetailView, self).get_object(queryset=None) post.body = markdown.markdown(post.body...方法其实也很简单,只需要稍微改动一下渲染 Markdown 文本内容的方式即可,具体代码就像这样: blog/views.py class PostDetailView(DetailView):...def get_object(self, queryset=None): # 覆写 get_object 方法的目的是因为需要对 post 的 body 值进行渲染 md
object_list %} {{dr.title}} {% endfor %} 5、重写 //ListView:tempate_name/context_object_name/get_queryset...ListView): template_name = "blog/index.html" context_object_name = "article_list" model=Article def get_queryset...Category.objects.all().order_by('name') return super(IndexView, self).get_context_data(**kwargs) 6、DetailView...用法: class ArticleDetailView(DetailView): model = Article template_name = "blog/detail.html" context_object_name...= "article" pk_url_kwarg = 'article_id' def get_object(self, queryset=None): obj = super(ArticleDetailView
get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...import TemplateView,ListView from django.utils import timezone from django.views.generic.detail import DetailView...DeleteView): model = employee success_url = reverse_lazy('employee_list') class EmployeeDetail(DetailView
queryset 产生数据的queryset实例或"类queryset"数据列表。 model 关联的模型类。 paginated_by 分页的每页数据项数。默认不起用分页。...方法 get_queryset 获取用于数据显示的列表对象。可以是类queryset对象。 queryset属性。未提供queryset属性时,返回model的默认管理器。...如果也没有提供model属性,将会产生ImproperlyConfigured异常。 paginatequeryset 根据需要,将queryset分页。
Django源码学习-8-ListView&DetailView通用视图 ?...from django.views.generic import ListView ListView 通过重写queryset, template_name和context_object_name来完成...10] 模板 context 中的变量名会有 object_list, _list (publisher_list),拥有相同数据 ordering 一个字符串或数组,传给 queryset...; 相当于:queryset.objects.order_by() allow_empty paginate_by [get_paginate_by()] 每页的 object 的数量,页数用 request.GET...指定的 objects 添加到模板 context get_queryset() 默认返回属性 queryset from django.views.generic import ListView
# blog/views.py from django.views.generic import DetailView from .models import Article class ArticleDetailView...(DetailView): model = Article def get_object(self, queryset=None): obj = super().get_object...(queryset=queryset) obj.viewed() return obj 现在我们可以仔细分析下计数器的工作原理了: 用户访问/blog/article/
分类页面的实现 考虑到分类页面是一个用来展示属于当前类别的所有文章,和首页一样的格式,就是显示的列表项十有八九会比首页少,因此分类页面的视图直接继承首页的视图,然后重写 get_queryset 方法就完事了...,代码如下: class CategoryView(IndexView): def get_queryset(self): return super().queryset.filter...('keyword', '') return super().queryset if not keyword else super().queryset.filter(Q(title__...首先是视图 personal_website\views.py,代码如下: from django.db.models import Q from django.views.generic import DetailView...context['categories'] = Category.objects.order_by('-id') return context class ArticleDetailView(DetailView
().filter(category=cate) 和 IndexView 不同的地方是,我们覆写了父类的 get_queryset 方法。...然后我们调用父类的 get_queryset 方法获得全部文章列表,紧接着就对返回的结果调用了 filter 方法来筛选该分类下的全部文章并返回。...DetailView 除了从数据库中获取模型列表的数据外,从数据库获取模型的一条记录数据也是常见的需求。比如查看某篇文章的详情,就是从数据库中获取这篇文章的记录然后渲染模板。...对于这种类型的需求,django 提供了一个 DetailView 类视图。...# 记得在顶部导入 DetailView class PostDetailView(DetailView): # 这些属性的含义和 ListView 是一样的 model = Post
) get_list_or_404(klass, *args, **kwargs) from django.views import generic generic.ListView generic.DetailView...username', 'email', 'is_staff') ViewSets 定义了 视图(view) 的行为. class UserViewSet(viewsets.ModelViewSet): queryset...SMURLTypeModel fields = ('type', 'name') class SMURLTypeViewSet(viewsets.ReadOnlyModelViewSet): queryset
领取专属 10元无门槛券
手把手带您无忧上云