第 15 篇:优化博客功能的细节,提升使用体验—— HelloDjango 系列教程

作者:HelloGitHub-追梦人物

文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库

在之前的系列教程中,我们已经实现了:文章的发布、展示、评论等功能,可能认真的小伙伴已经发现这些功能有一些地方设计的不是很好,今天我们就来优化一些体验和操作上的细节。让我们的博客更加完美,使用起来更加顺手~

在模型中指定排序

为了让文章(Post)按发布时间逆序排列,让最新发表的文章排在文章列表的最前面,我们对返回的文章列表进行了排序,即各个视图函数中都有类似于 Post.objects.all().order_by(‘-created_time‘) 这样的代码,导致了很多重复。因为只要是返回的文章列表,基本都是逆序排列的,所以可以在 Post 模型中指定 Post 的自然排序方式。

django 允许我们在 models.Model 的子类里定义一个名为 Meta 的内部类,通过这个内部类指定一些属性的值来规定这个模型类该有的一些特性,例如在这里我们要指定 Post 的排序方式。首先看到 Post 的代码,在 Post 模型的内部定义的 Meta 类中,指定排序属性 ordering

blog/models.py

class Post(models.Model):
    ...
    created_time = models.DateTimeField()
    ...

    class Meta:
        verbose_name = '文章'
        verbose_name_plural = verbose_name
        ordering = ['-created_time']

ordering 属性用来指定文章排序方式,[‘-created_time‘] 指定了依据哪个属性的值进行排序,这里指定为按照文章发布时间排序,且负号表示逆序排列。列表中可以有多个项,比如 ordering = [‘-created_time‘, ‘title‘] 表示首先依据 created_time 排序,如果 created_time 相同,则再依据 title 排序。这样指定以后所有返回的文章列表都会自动按照 Meta 中指定的顺序排序,因此可以删掉视图函数中对文章列表中返回结果进行排序的代码了。

评论的模型类(Comment)也可以添加这个属性。

完善跳转链接

导航栏有一个 Black & White 的 Logo,我们希望点击它就能回到首页面,只需修改一下超链接即可。打开 base.html,修改 Logo 处的超链接:

<header id="site-header">
  <div class="row">
      <div class="logo">
        <h1><a href="{% url 'blog:index' %}"><b>Black</b> &amp; White</a></h1>
      </div>
  ...
  </div>
</header>

另外导航栏还有一个首页导航按钮,也希望点击它就能回到首页面,修改的任务作为练习交给你了(有两处,一处是桌面端导航,另一处是移动端导航)。

当然还有一些跳转可以完善,比如文章标题下有分类、发布时间、作者、评论量、阅读量等信息,可以设置点击分类跳转到分类页面;点击阅读量就跳转到文章详情页等,这些细节部分不涉及新知识,就当做练习交给你自己完成了。

显示正确的评论量

有两处地方显示的评论量(首页文章列表和文章详情页),显示评论量的方法很简单。回顾一下我们是如何获取某篇文章下的评论列表的?我们使用的是 post.comment_set.all()all 方法返回该 post 关联的评论列表。此外模型管理器(comment_set 是一个特殊的模型管理器)还有一个 count 方法,返回的是数量,即 post 下有多少条评论,我们可以直接在模板中调用这个方法:{{ post.comment_set.count }}。将评论量替换成该模板变量就可以正确显示文章的评论数了。

跳转评论区域

有时候文章内容长了,评论列表的内容就需要滚动很长的页面才能看到。我们可以在评论区域增加一个锚点,2 处显示评论量的地方超链接都指向这个锚点处,这样点击这两个地方将直接跳转到评论列表区域,方便用户快速查看评论内容。

看到显示评论的模板代码:

<section class="comment-area" id="comment-area">
    <hr>
    <h3>发表评论</h3>
    ...
</section>

我们已经给评论区域的标签设置了 id,只需要在评论的链接后加上这个 id 的锚点即可:

blog/index.html

<div class="entry-meta">
    ...
    <span class="comments-link"><a href="{{ post.get_absolute_url }}#comment-area">{{ post.comment_set.count }} 评论</a></span>
    <span class="views-count"><a href="#">588 阅读</a></span>
</div>
blog/detail.html

<header class="entry-header">
    <h1 class="entry-title">{{ post.title }}</h1>
        ...
        <span class="comments-link"><a href="#comment-area">{{ post.comment_set.count }} 评论</a></span>
        <span class="views-count"><a href="#">588 阅读</a></span>
    </div>
</header>

注意这里从 index.html 到评论区域需要跳转页面,因此 href 超链接指定为绝对 URL,而文章详情和评论区域在一个页面,因此仅需指定锚点即可。

结束了么

我们通过一个博客实战项目,了解了 django 基本的开发技术。包括如何编写模型(Model)、如何编写视图函数(View)、如何使用 django 内置的模板系统(Template)以及如何配置路由(URL),这四大模块是 django 开发的核心所在,现在我们已经能够基本掌握这些模块的使用方法了。

但是,还没完...

Django 提供的不仅仅是这些,我们的博客也不仅仅只有这些功能。如何对博客文章进行分页?如何给博客提供 RSS 订阅服务?如果实现文章搜索?如果网站需要提供用户系统,如何实现用户的注册登录?如何部署到服务器上让他人通过公网访问?这些需求都可以利用 django 内置的模块或者丰富的第三方应用来实现。

另外,django 还有海量的第三方应用来提供更加丰富的功能。比如当他人评论了我的文章时,如何收到通知提醒?网站需要提供新浪微博、微信等社交账号的登录等等,这些都可以借助 django 第三方应用快速完成,而我们自己只需要写很少量的代码就可以了。

所以,让我们再接再厉,进入到进阶篇,继续学习更多的 django 开发技巧,为博客提供更多的功能吧!



『讲解开源项目系列』——让对开源项目感兴趣的人不再畏惧、让开源项目的发起者不再孤单。跟着我们的文章,你会发现编程的乐趣、使用和发现参与开源项目如此简单。欢迎留言联系我们、加入我们,让更多人爱上开源、贡献开源~

原文地址:https://www.cnblogs.com/xueweihan/p/11514283.html

时间: 2024-10-28 17:19:07

第 15 篇:优化博客功能的细节,提升使用体验—— HelloDjango 系列教程的相关文章

15篇干货博客 38本书 4门公开课 减掉20斤体重 我的2014总结

欢迎关注我的新博客地址:http://cuipengfei.me/ 2014年即将结束,需要做一些总结. 既然总结是写在博客上的,第一项就先说博客吧. 博客 2014年写了18篇博客,其中15篇和Scala有关,自认为都是有且仅有干货的. 对此,我比较满意. 不过这个数字存在欺骗性,15篇Scala的博客,其中4篇写于1月份,6篇写于6月份,其余的零散的写就与其他月份. 66.66-%集中地爆发于两个月里,其余十个月只贡献了总体的33.33-% 可见写博客这件事于我而言并没有形成持久的习惯,只是

通过自定义样式优化博客界面

园子里的模板非常丰富,但距自己的期望,总是差一点点.加上我使用的是Windows Live Writer 2009写博客(2011的某些功能我无法接受,退回到习惯的旧版),所以写博客快则快矣,界面就有点不忍直视了.如前两天写的一篇博文: 无论是标题,还是各级子标题.代码.例子,布局,感觉都是乱糟糟的,打开页面,实在没有阅读下去的兴趣. 于是研究了一下究竟怎样来优化博客界面,对以下方面进行了修改: 每个段落加上首行缩进 标题.子标题样式修改 代码样式修改 增加阅读目录 增加回到顶部 最后的结果好多

我的第一篇rust博客

接触rust是在一个前端的群里,群主推荐的.混群很久都没有引起我的注意,直到有一次百度了解,才发现它的魅力.而且它是WebAssembly首推的编程语言,自然有它的独特之处.rust标榜内存安全和线程安全,并且并不是虚拟机语言,不存在垃圾回收.基本上就是可以兼顾虚拟机语言的自由和非虚拟机语言的速度,当然有得有失,带来的缺点就是语法丑陋,难以掌握,这对于它带来的好处来说都不是事儿.rust的内存安全和线程安全实现机制就是独占内存资源的所有权,任何时候只允许只有一个变量(可以是变量的引用)对内存进行

web前端设计师需要常去的15个设计博客资源站

Web设计是一个不断变化的领域,因此掌握最新的发展趋势及技术动向对设计师来说非常重要,无论是学习新技术,还是寻找免费资源与工具,设计博客都是很不错的去处.本文向大家推荐15个非常不错的设计博客. 1. Smashing Magazine Smashing Magazine创建于2006年,是最好的设计博客之一,有很多Web设计和开发方面的高质量文章,内容涉及HTML5.CSS.JavaScript.Photoshop.Wordpress.壁纸和网站可用性. 2. Net Tuts Net Tut

第 14 篇:交流的桥梁“评论功能”——HelloDjango 系列教程

截止到目前为止我们的 django blog 文章展示部分,已经实现的"八九不离十"了.你以为本系列文章就要结束了吗?不能够!新的征程才刚刚开始,HelloDjango 系列文章刚刚过半,后面的文章你将接触更多博客系统的细节.向着一个小而全的博客系统前进.前进.前进,你定会收获颇多. 今天我们就来开启博客的评论功能,建起和读者的沟通桥梁. 创建评论应用 相对来说,评论是另外一个比较独立的功能.Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码组织到这个应

要批量下载的博客文章太多,又不想全部下载怎么办---豆约翰博客备份专家新增选择导出博客功能

有的时候,我们要下载的博主比较高产,发表了数以千计的博文,要批量下载的博客文章太多,又不想全部下载怎么办? 针对这种需求,新版本的博客备份专家开发了博客的部分导出功能. 与以往只能导出全部博文不同,新版博客备份专家,让用户可以通过先按分类或标题进行筛选,然后勾选想导出的部分博客进行导出. 首先,我们可以对已经下载下来的博文按文章标题或文章分类进行筛选,比如这里我们按分类筛选:如下图所示: 以上,我们在分类筛选框中录入了[IT人生涯],可以看到文章列表自动显示出来属于该分类的文章,不属于该分类的文

python+scrapy分析博客园首页4000篇优质博客(图解)

1.侵删 本文数据是获取的博客园首页的4000条数据,为了不对博客园服务器造成压力,所以源码不会公开,在此,敬请博客园官方团队放心. 获取到的数据从2019-7-11到2019-9-12,此数据也不会公开. 由于会涉及到一些博主的数据,所以有博主不愿公开数据,联系我及时删除. 2.先上数据分析结果 写文最多的博主top6 ---->(最勤劳的博主)?(′?`*) 黑白影-->发文54篇 周国通-->发文38篇 宜信技术-->发文30篇 削微寒-->发文28篇 泰斗贤若如--&

Ceph相关博客、网站(256篇OpenStack博客)

官网文档: http://docs.ceph.com/docs/master/cephfs/ http://docs.ceph.com/docs/master/cephfs/createfs/   (创建cephfs文件系统) ceph官方中文文档: http://docs.ceph.org.cn/ openstack中的配置: http://docs.ceph.com/docs/master/rbd/rbd-openstack/ 博客等: http://blog.csdn.net/dapao1

优化博客园的JS代码总结

为Markdown添加目录 这里我参考的是妙音天女的文章. 为文章添加版权信息 这里我参考的是呆尐兔兔的文章. 最后的代码 <script language="javascript" type="text/javascript"> function setCopyright(){ /* 设置版权信息,转载出处自动根据页面url生成 * window.location.href:读取当前url */ var info_str = '<p>本文为