在写点击博客的所属分类,显示所有该分类的文章时真是让我想了好一会,为什么呢?因为我使用的是cbv模式开发的而不是简单的视图处理逻辑的,所以,有些操作会被包装好了,你并不知道它的细节,那么我们今天要实现的这个功能需要得到GET请求的category参数,那就麻烦了。

一开始,我以为需要重写它包装好的get()函数,结果弄了好一会后发现根本不好用。

后来,实在是没办法了,参照网上的说法,看了一看django源码,哇,效果果然显著,原来我们继承的ListView和MultipleObjectMixin类都继承自Context_Mixin类下面是它的代码:

class ContextMixin(object):
"""
A default context mixin that passes the keyword arguments received by
get_context_data as the template context.
""" def get_context_data(self, **kwargs):
if 'view' not in kwargs:
kwargs['view'] = self
return kwargs

那么就好了,我们在get_queryset(self)中只需要获得kwargs['category']就可以了(看源码果然有好处啊)下面是代码:

class CategoryView(ListView, MultipleObjectMixin):
template_name = 'apps/full-width.html'
context_object_name = 'article_list'
paginate_by = 10 def get_queryset(self):
cat_query = Category.objects.get(name=self.kwargs['category'])
article_list = cat_query.article_set.filter(status='p')
return article_list

那个 MultipleObjectMixin是以为分页要用到需要继承的类。

在解决这个问题时还遇到另一个问题:

TypeError at /archive/category/Python/

object of type 'NoneType' has no len()

这是个什么问题呢?我们继承了MultipleObjectMixin类,它是负责处理分页的,但是我发现我的代码中没有return get_queryset()获得结果,所以该类无法获取读取信息的长度,所以会报这个错误。

这个问题让我意识到,学习不是去学习解决问题,而是去学习分析问题的过程,学习debug这才是最重要的,因为我们不可能只学习一门语言,一类只是,要把学到的只是形成体系,这样才是最应该的。

 

使用django开发博客过程记录4——Category分类视图的更多相关文章

  1. 使用django开发博客过程记录3——博客侧栏实现

    说起这个侧栏真是苦恼我很长时间,一开始以为和之前的一样传递额外参数就可以了就像下面这样: class IndexView(ListView): template_name = 'apps/index. ...

  2. 使用django开发博客过程记录5——日期归档和视图重写

    针对每条博客的观看次数我么是使用django的Mixin实现的: def get(self, request, *args, **kwargs): last_visit = request.sessi ...

  3. 使用django开发博客过程记录2——博客首页及博客详情的实现

    1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ...

  4. 使用django开发博客过程记录1——数据库设计

    1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ...

  5. django开发博客(1) 入门

    现在正式开始博客开发 1.安装django1.4 如果你使用的是fedoraDVD版,安装时选择了web开发组建,这一步可以省略,因为它自带django环境 django下载地址 https://ww ...

  6. 纯django开发博客系统

    企业级教程:纯django开发博客系统 1.视频教程 https://www.duanshuilu.com/ 2.教程文档 https://www.duanshuilu.com/ 0.课程简介1.简价 ...

  7. Django开发博客- 三部曲

    其实在django中实现一个功能只需要三个步骤即可,这里我姑且叫它三部曲. 这三部曲就是: 定义urls映射 定义views 定义templates 什么是URL? URL就算一个WEB地址,你在浏览 ...

  8. Django开发博客 入门篇

    Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传 ...

  9. Django开发博客(七)——markdown优化

    背景 上一次把markdown集成之后.发现还是有非常多问题. 这次须要做一些优化. 1.markdown与普通文本的差别显示. 2.添加点击量的统计 3.加入名片卡的滑动 版本号相关 操作系统:Ma ...

随机推荐

  1. iOS --SQL的增加、删除、查找、修改

    iOS对于数据库的操作:增加.删除.查找.修改 首先需要创建一个数据库:本程序的数据库是在火狐浏览器里的插件里写的微量型数据库 火狐找查找SQLite Manager的步骤: 第一步:在工具栏找到附加 ...

  2. Junit单元测试

    写一个被测试的类 这是类中的一些方法,将一个16进制转化为10进制 reckon()为转化的主要方法,返回结果为10进制数 judge()判断字符是否在0-9,A-F之间,并将字符转化为0-15之中的 ...

  3. 分布式一致性算法--Paxos

    Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法.Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致.在工程实践意义上来说, ...

  4. pptpvpn 连接后 无法上外网

    VPN拨号后只能连内网,不能上外网的原因和解决方法 因为众所周知的原因,很多个人或者单位需要架设自己的VPN.会遇到一些奇怪的情况,比如说:为什么连上单位的VPN后就只好上公司的内网(局域网),外网( ...

  5. 修复 Windows7 资源管理器左侧收藏夹无法展开问题

    相信大家在网上搜多到的解决办法大多数都是修改注册表,但是这个办法多数是无效的 1.运行regedit 2.展开到HKEY_CLASSES_ROOT\lnkfile 3.添加一个字符串值:IsShort ...

  6. 【原】移动web点5像素的秘密

    最近和一个朋友聊天,朋友吐露了工作上的一些不开心,说自己总是喜欢跟别人比较,活得比较累,这种感觉大部分人经历过,往往觉得是自己心态不好,其实不然,这是人性,此时应该快速摆脱这种状态,想到DOTA大9神 ...

  7. OnDraw函数

    本文仅用于学习交流,商业用途请支持正版!转载请注明:http://www.cnblogs.com/mxbs/p/6219428.html 方法一.对字符串直接赋值 在View类中定义了OnDraw函数 ...

  8. [bzoj3673][可持久化并查集 by zky] (rope(可持久化数组)+并查集=可持久化并查集)

    Description n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0& ...

  9. 索引超出了数组界限(Microsoft.SqlServer.Smo)

    SSMS连接远程SQL Server服务器是很方便的. 昨天我用SQL Server 2008 SSMS连接SQL Server 2012竟然报错,如下图: 在网上搜了,参考这个参考那个,太啰嗦了,确 ...

  10. EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子

    本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...