内容简介:13 - 已知小问题修正
在模型中指定排序
为了让文章(Post)按发布时间逆序排列,即最新发表的文章排在文章列表的最前面,我们对返回的文章列表进行了排序,即各个视图函数中都有类似于 Post.objects.all().order_by('-created_time')
这样的代码,这导致了很多重复。因为只要是返回的文章列表,基本都是逆序排列的,因此我们可以在 Post 模型中指定 Post 的自然 排序 方式。
Django 允许我们在 models.Model 的子类里定义一个 Meta 的内部类,这个内部类通过指定一些属性来规定这个类该有的一些特性,例如在这里我们要指定 Post 的排序方式。首先看到 Post 的代码:
blog/models.py @python_2_unicode_compatible class Post(models.Model): ... created_time = models.DateTimeField() ... def __str__(self): ... def get_absolute_url(self): ...
现在在 Post 类的内部定义一个 Meta 类,并指定排序属性:
blog/models.py @python_2_unicode_compatible class Post(models.Model): ... created_time = models.DateTimeField() ... def __str__(self): ... def get_absolute_url(self): ... class Meta: ordering = ['-created_time']
ordering
属性用来指定文章排序方式, ['-created_time']
指定了依据哪个属性的值进行排序,这里指定为按照文章发布时间排序,且负号表示逆序排列。列表中可以用多个项,比如 ordering = ['-created_time', 'title']
,那么首先依据 created_time
排序,如果 created_time
相同,则再依据 title
排序。这样指定以后所有返回的文章列表都会自动按照 Meta 中指定的顺序排序,因此可以删掉视图函数中对文章列表中返回结果进行排序的代码了。
完善跳转链接
导航栏有一个 Black & White 的 Logo,我们希望点击它就能回到首页面,只修修改一下超链接即可。打开 base.html,修改 Logo 处的超链接:
<header id="site-header"> <div class="row"> <div class="logo"> - <h1><a href="index.html"><b>Black</b> & White</a></h1> + <h1><a href="{% url 'blog:index' %}"><b>Black</b> & White</a></h1> </div> ... </div> </header>
另外导航栏还有一个首页导航按钮,也希望点击它就能回到首页面,修改的任务作为练习交给你了。
当然还有一些跳转可以完善,比如文章标题下有分类、发布时间、作者、评论量、阅读量等信息,可以设置点击分类跳转到分类页面;点击评论量就跳转到文章详情页的评论处等,这些细节部分不涉及新知识,就当做练习交给你自己完成了。
显示正确的评论量
有两处地方显示的评论量,显示评论量的方法很简单。回顾一下我们是如何获取某篇 post
的下的评论列表的?我们使用的是 post.comment_set.all()
。 all
方法返回该 post
关联的评论列表。此外模型管理器( comment_set
是一个特殊的模型管理器)还有一个 count
方法,返回的是数量,即 post
下有多少条评论,我们可以直接在模板中调用这个方法:{{ post.comment_set.count }}。将评论量替换成该模板变量就可以正确显示文章的评论数了。
结束了么
我们通过一个博客实战项目,了解了 Django 基本的开发技术。包括如何编写模型(Model)、如何编写视图函数(View)、如何使用 Django 内置的模板系统(Template)以及如何配置路由(URL),这四大模块是 Django 开发的核心所在,现在我们已经能够基本掌握这些模块的使用方法了。
但是,还没完...
Django 提供的不仅仅是这些,我们的博客也不仅仅只有这些功能。如何实现标签云效果?如何给博客提供 RSS 订阅服务?如果实现文章搜索?如果网站需要提供用户系统,如何实现用户的注册登录?如何部署到服务器上让他人通过公网访问?这些需求都可以利用 Django 提供的 API 来实现。
另外,Django 还有海量的第三方应用来提供更加丰富的功能。比如当他人评论了我的文章时,如何收到通知提醒?网站需要提供新浪微博、微信等社交账号的登录等等,这些都可以借助 Django 第三方应用快速完成,而我们自己只需要写很少量的代码就可以了。
所以,让我们再接再厉,进入到 Django 博客开发进阶教程 ,学习更多的 Django 开发技巧,为博客提供更多的功能吧!
总结
本章节的代码位于: Step13: fix some issues 。
如果遇到问题,请通过下面的方式寻求帮助。
- 在 已知小问题修正- 追梦人物的博客 的评论区留言。
- 将问题的详细描述通过邮件发送到 djangostudyteam@163.com,一般会在 24 小时内回复。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 13 - 已知小问题修正
- 利用“已知明文攻击”破解加密的压缩文件
- 喧喧发布 2.5.2 版本,主要修复已知问题
- MDword 1.0.2 正式发布,已知 BUG 修改
- 喧喧 2.4.1 发布,解决了已知的关键问题
- Apiggs 发布 1.6 版本,支持复杂类型及已知 bug
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
HTML 5实战
陶国荣 / 机械工业出版社 / 2011-11 / 59.00元
陶国荣编著的《HTML5实战》是一本系统而全面的HTML 5教程,根据HTML 5标准的最新草案,系统地对HTML 5的所有重要知识点进行了全面的讲解。在写作方式上,本书以一种开创性的方式使理论与实践达到极好的平衡,不仅对理论知识进行了清晰而透彻的阐述,而且根据读者理解这些知识的需要,精心设计了106个完整(每个案例分为功能描述、实现代码、效果展示和代码分析4个部分)的实战案例,旨在帮助读者通过实......一起来看看 《HTML 5实战》 这本书的介绍吧!