分类页面的实现 考虑到分类页面是一个用来展示属于当前类别的所有文章,和首页一样的格式,就是显示的列表项十有八九会比首页少,因此分类页面的视图直接继承首页的视图,然后重写 get_queryset 方法就完事了...——其实还是和主页面差不多,同样继承主页面对应的视图,然后重写 get_queryset 方法就完事了,代码如下: class SearchView(IndexView): def get_queryset...,接下来我就给出视图、模板和 URL 的完整代码,首先是视图 personal_website\views.py,代码如下: from django.db.models import Q from django.views.generic...首先进入 bootstrap 官网(https://www.bootcss.com/)把东西下载下来,下载好之后应该会得到一个压缩文件,我们进行解压,解压之后如图所示。 ?...接下来不用去看都应该知道怎么弄了吧,把这里 css 文件夹下面所有文件复制到项目中的 css 静态文件目录,同时把 js 文件夹中的所有文件复制到项目中的 js 静态文件目录,完成之后项目中静态文件目录如图所示
开发环境: python 3.6 django 1.11 场景一 经常有从数据库中获取一批数据,然后在前端以列表的形式展现,比如:获取到所有的用户,然后在用户列表页面展示。...解决方案 常规写法是,我们通过Django的ORM查询到所有的数据,然后展示出来,代码如下: def user_list(request): """返回UserProfile中所有的用户"""...(self): # 重写get_queryset方法 # 获取所有is_deleted为False的用户,并且以时间倒序返回数据 return UserProfile.objects.filter...(is_deleted=False).order_by('-create_time') 如果你要对数据做更多维度的过滤,比如:既要用户是某部门的,还只要获取到性别是男的,这时候,可以使用Django提供的...(self, **kwargs): # 重写get_context_data方法 # 很关键,必须把原方法的结果拿到 context = super().get_context_data
方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...: 指定在上下文中使用的变量的名称. pk_url_kwarg: URLconf中,包含逐渐的关键字参数的名称.默认为'pk'. get_context_data:返回显示对象的上下文数据....方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg
使用 Django 的模型,都是 django.db.models.Model 类的子类。 每个类将被转成数据库表。 每个字段由 django.db.models.Field 子类转成数据库的列。...模型之间的关系使用 ForeignKey 字段。 位置参数 related_name 用于引用关联的模型。 related_name 参数将用于创建反向关系。...posts' template_name = 'board/topic_posts.html' # 主题回复列表, 复用分页组件 paginate_by = 20 def get_context_data...self.request.session[session_key] = True kwargs['topic'] = self.topic return super().get_context_data...def get_queryset(self): queryset = super().get_queryset() return queryset.filter
Django源码学习-8-ListView&DetailView通用视图 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...ListView的自定义,还可以通过重写get_context_data方法传递额外的参数或内容。...() 可以添加额外的模板 context , 默认将 model / queryset 指定的 objects 添加到模板 context get_queryset() 默认返回属性 queryset.../books_by_publisher.html' def get_queryset(self): self.publisher = get_object_or_404(Publisher
准备工作 新建一个Django项目 # 新建一个django项目 $ django-admin startproject mysite # 新建一个app $ django-admin startapp...', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', '...url return reverse('blog:detail', kwargs={'article_id': self.pk}) Django给我们提供了很多有用的字段,比如上面提到的...Django中的一对多是在一中进行设置,这里对应于文章的分类,ForeignKey即数据库中的外键。...(**kwargs) 上面因为我们要进行markdown处理,所以重新自定义了get_queryset,如果不要进行相应的处理,直接制定model就行了,get_context_data可以添加一些额外的字段
get_context_data(**kwargs): 返回显示对象的上下文数据,通过覆盖该方法返回额外的上下文 2.DetailView ?...: 指定在上下文中使用的变量的名称. pk_url_kwarg: URLconf中,包含逐渐的关键字参数的名称.默认为'pk'. get_context_data:返回显示对象的上下文数据....方法: get_queryset():返回用来获取本视图显示对象的queryset.如果设置了queryset属性,get_queryset()默认返回它的值. get_object(queryset=...None):返回该视图要显示的单个对象.如果提供了queryset,该queryset将作为对象的查询源,否则,将使用get_queryset().get_object()从视图的所有参数中查找pk_url_kwarg...get_context_data(**kwargs):返回显示对象的上下文数据. 4.CreateView ?
="about.html")), 2、通用视图 about.html xx/templates/about.html 3、List obj的通用视图 urls.py: from django.views.generic...BlogPost path(r'bloglist/',ListView.as_view(template_name='bloglist.html',model=BlogPost)), 4、List obj的通用视图...in object_list %} {{dr.title}} {% endfor %} 5、重写 //ListView:tempate_name/context_object_name/get_queryset...()/get_context_data()放其他keys/values进去。..." context_object_name = "article_list" model=Article def get_queryset(self): article_list = Article.objects.all
具体的实现我们以后会专门开辟一个专栏分析类视图的源代码,到时候就能看出 Django 使用的魔法了)。...().filter(category=cate) 和 IndexView 不同的地方是,我们覆写了父类的 get_queryset 方法。...然后我们调用父类的 get_queryset 方法获得全部文章列表,紧接着就对返回的结果调用了 filter 方法来筛选该分类下的全部文章并返回。...对于这种类型的需求,Django 提供了一个 DetailView 类视图。...最后我们复写了 get_context_data 方法。这部分对应着 detail 视图函数中生成评论表单、获取 post 下的评论列表的代码部分。
类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比如继承等。...1.1 View django.views.generic.base.View是主要的类视图,所有的类视图都是继承自他。如果我们写自己的类视图,也可以继承自他。...另外一个是get_context_data,这个方法是用来返回上下文数据的,也就是在给模版传的参数的。...get_context_data:获取上下文的数据。 get_queryset:如果你提取数据的时候,并不是要把所有数据都返回,那么你可以重写这个方法。将一些不需要展示的数据给过滤掉。...他们在Django中的路径为django.core.paginator.Paginator和django.core.paginator.Page。
其中存的是视频文件的地址,在之后的视频管理中我们将会对视频的上传进行具体的讲解。 cover 视频封面。数据类型是ImageField。...之后,我们在templates文件夹下,建立video目录,用来存放视频相关的模板文件,首先我们创建首页文件index.html。并将刚才获取到的数据显示出来。...这里我们使用到了django中的内置标签,比如for语句、empty语句。这些都是django中非常常用的语句。在之后的教程中我们会经常遇到。...c={{ item.id }} 这里用c代表分类的id,点击后,会传到视图类中,在视图类中,我们使用 get_queryset() 函数,将get数据取出来。...更加详细的介绍,可参考官方。 当数据传递给模板之后,模板就负责显示出来就行了。
Django 使用 CSRF Token 保护所有的 POST 请求,这是避免外部站点或者应用程序向服务器的应用程序提交数据的安全措施。...基于类的通用视图 from django.views.generic import UpdateView, ListView ① 主页 class BoardListView(ListView):...context_object_name = 'topics' template_name = 'board/topics.html' paginate_by = 20 def get_context_data...(self, **kwargs): kwargs['board'] = self.board return super().get_context_data(**kwargs...) def get_queryset(self): self.board = get_object_or_404(Board, pk=self.kwargs.get('pk')
from django.views import generic from blog.models import * from ipware.ip import get_ip class IndexView...template_name = 'lw-index-noslider.html' # 加载该html文件 context_object_name = "articles" # 是数据库搜索出来的结果存放的变量名字...,用于模板循环显示 paginate_by = 4 # 设置分页中每一页的记录数目 model = Article # 定义从哪份model中查询 def get_queryset...self): return Article.objects.filter(show_status=True).order_by('-time_created') def get_context_data...(self, **kwargs): context = super(IndexView, self).get_context_data(**kwargs) context
答案是派生DetailView,并且在get_context_data方法中提供你自己的实现。...要在你自己想要改变上下文的类中保持这一行为,你应该确保在超类中调用了get_context_data。如果没有任意两个类尝试定义相同的键,会返回异常的结果。...然而,如果任何一个类尝试在超类持有一个键的情况下覆写它(在调用超类之后),这个类的任何子类都需要显式于超类之后设置它,如果你想要确保他们覆写了所有超类的话。...相当方便的是, ListView 有一个get_queryset() 方法来供我们重写。在之前,它只是返回一个queryset属性值,但是现在我们可以添加更多的逻辑。...publisher'] = self.publisher return context 执行额外的工作 我们需要考虑的最后的共同模式在调用通用视图之前或者之后会引起额外的开销。
通过学习这两个功能,我们会加深对django中通用视图类的理解与应用。...并分别设置它们的别名为"liked_videos"和"collected_videos",有django基础的同学应该明白,通过别名也可以访问到数据。...(self, *, object_list=None, **kwargs): context = super(CollectListView, self).get_context_data...get_page_list(paginator, page) context['page_list'] = page_list return context def get_queryset...get_page_list(paginator, page) context['page_list'] = page_list return context def get_queryset
在博客首页进行文章列表的显示。...内置的 ListView 视图类 ?...django.views.generic.list.ListView ListView 有以下方法: dispatch() http_method_not_allowed() get_template_names...() get_queryset() get_context_object_name() get_context_data() get() render_to_response() 修改 url 修改...blog/urls.py 文件: 在urls.py中使用类视图的时候都是调用它的 .as_view() 函数 ?
Class-based views是Django为解决建站过程中的常见的呈现模式而建立的。...使用django自身的cbvs cbvs是可扩展的,但在也增加了复杂度,有时甚至出现8个import引入关系。...ListView简介 listview是一个展示列表的view,返回的是一个template,包含两个关键方法: def get_context_data(self, **kwargs):...def get_queryset(self): 第一个方法返回一个字典给前端,包括分页信息,列表信息,已经其他自定义的信息;第二个方法返回数据库中获取到的数据(可能经过条件迭代),具体实现的实例代码如下...在Django中, 我们可以使用mixin为CBVs提供更多的扩展性, 当然在类继承过程中, 我们推荐以下原则: Django自身提供的View永远在最右边 mixin依次在以上view的左边 mixin
项目简介该项目是基于python的web类库django开发的一套web网站,二手商品交易平台,给师弟开发的课程作业。大家在学习过程中,遇到问题可以github咨询作者。...预览展示http://mask.gitapp.cn源码地址https://github.com/geeeeeeeek/mask开发步骤:启动项目django-admin startproject mask...IndexView, 开始编写IndexView的代码。...context_object_name = 'product_list' paginate_by = 15 c = None def get_context_data(self, *,...) context['c'] = self.c context['page_list'] = page_list return context def get_queryset
项目简介 该项目是基于python的web类库django开发的一套web网站,做为一个公益项目。...预览地址 https://i.mypython.me/ 源码地址 https://github.com/geeeeeeeek/mask 启动项目 django-admin startproject mask...IndexView, 开始编写IndexView的代码。...context['c'] = self.c context['page_list'] = page_list return context def get_queryset...提交页 最后再来看一下提交页,它是由CommitView来实现的。
原文地址:https://mypython.me 本讲中,我们会讲到评论管理功能,数据库中的每一条是来自用户的评价,因此后台中的评论管理只有评论列表和评论删除功能,没有增加评论和编辑评论。...来实现的。...(self, *, object_list=None, **kwargs): context = super(CommentListView, self).get_context_data...context['page_list'] = page_list context['q'] = self.q return context def get_queryset...,通过get_context_data()来实现分页功能,通过get_queryset()来实现搜索功能。