使用django开发博客过程记录4——Category分类视图
在写点击博客的所属分类,显示所有该分类的文章时真是让我想了好一会,为什么呢?因为我使用的是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分类视图的更多相关文章
- 使用django开发博客过程记录3——博客侧栏实现
		说起这个侧栏真是苦恼我很长时间,一开始以为和之前的一样传递额外参数就可以了就像下面这样: class IndexView(ListView): template_name = 'apps/index. ... 
- 使用django开发博客过程记录5——日期归档和视图重写
		针对每条博客的观看次数我么是使用django的Mixin实现的: def get(self, request, *args, **kwargs): last_visit = request.sessi ... 
- 使用django开发博客过程记录2——博客首页及博客详情的实现
		1.什么是CBV(Class-based views) 2.博客首页及博客详情实现 1.什么是CBV 什么是CBV?说白了就是以前是视图为处理请求返回响应的函数,有了cbv之后我们就可以用类处理请求和 ... 
- 使用django开发博客过程记录1——数据库设计
		1.数据库设计 2.插入测试数据 3.配置相关问题 1.数据库设计 数据库有简单的三张表:Article.Category.Tag以下是代码 # -*- coding:utf-8 -*- from _ ... 
- django开发博客(1) 入门
		现在正式开始博客开发 1.安装django1.4 如果你使用的是fedoraDVD版,安装时选择了web开发组建,这一步可以省略,因为它自带django环境 django下载地址 https://ww ... 
- 纯django开发博客系统
		企业级教程:纯django开发博客系统 1.视频教程 https://www.duanshuilu.com/ 2.教程文档 https://www.duanshuilu.com/ 0.课程简介1.简价 ... 
- Django开发博客- 三部曲
		其实在django中实现一个功能只需要三个步骤即可,这里我姑且叫它三部曲. 这三部曲就是: 定义urls映射 定义views 定义templates 什么是URL? URL就算一个WEB地址,你在浏览 ... 
- Django开发博客 入门篇
		Django是神马? Django是一个开源免费的Web框架,使用Python编写.能够让你快速写出一个Web应用, 因为它包含了绝大部分的组件,比如认证,表单,ORM,Session,安全,文件上传 ... 
- Django开发博客(七)——markdown优化
		背景 上一次把markdown集成之后.发现还是有非常多问题. 这次须要做一些优化. 1.markdown与普通文本的差别显示. 2.添加点击量的统计 3.加入名片卡的滑动 版本号相关 操作系统:Ma ... 
随机推荐
- DAO设计模式
			DAO设计模式 DAO设计模式简介: DAO设计模式可以减少代码量,增强程序的可移植性,提高代码的可读性. DAO(数据库操作对象)设计模式是 JavaEE 数据层的操作.主要由五部分组成: 1.数据 ... 
- 吐个槽:bose的售后真心差劲!愧对这个顶级音响产品!
			400电话只提供周一到周五(中午有1个小时非服务时间),打进去就不厌其烦地告知你服务时间,你多按几个0,对方就直接把电话给你挂了!即使耐心等待它啰嗦完,哪怕只有0个人等待或1个人等待,你也是接不进去的 ... 
- 初学JavaScript
			什么是 JavaScript? JavaScript 被设计用来向 HTML 页面添加交互行为. JavaScript 是一种脚本语言(脚本语言是一种轻量级的编程语言). JavaScript 由数行 ... 
- CSS3:RGBA的使用方法
			1.说明 此色彩模式与RGB相同,只是在RGB模式上新增了Alpha透明度. RGBA(R,G,B,A) 2.取值 R: 红色值,正整数值的取值范围为:0 - 255,百分数值的取值范围为:0.0% ... 
- python列表模拟堆栈和队列
			对列特点:先进先出.后进后出 用列表insert.pop模拟进队出队: >>> l = [] >>> l.insert(0,'p1') >>> l ... 
- WPF 自定义滑动ScrollViewer
			自定义滑动滚动条 预期目标:横向滚动条,可以左右滑动,用鼠标按住(触摸)然后释放可以实现快速滑动. 我们有几种方案: 1.ScrollViewer,修改其中的横向滚动条,将其中的背景设置为透明. 但是 ... 
- 压缩和解压文件:tar gzip bzip2 compress(转)
			tar[必要参数][选择参数][文件] 压缩:tar -czvf filename.tar.gz targetfile解压:tar -zxvf filename.tar.gz参数说明: -c 建立新的 ... 
- C# 闭包问题-你被”坑“过吗?
			引言 闭包是什么?以前看面试题的时候才发现这个名词. 闭包在实际项目中会有什么问题?现在就让我们一起来看下这个不太熟悉的名词. 如果在实际工作中用到了匿名函数和lamada表达式,那你就应该高度注意啦 ... 
- 异步方法的意义何在,Async和await以及Task的爱恨情仇,还有多线程那一家子。
			前两天刚感受了下泛型接口的in和out,昨天就开始感受神奇的异步方法Async/await,当然顺路也看了眼多线程那几个.其实多线程异步相关的类单个用法和理解都不算困难,但是异步方法Async/awa ... 
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
			Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ... 
