在Post模型中指定Post的自然排序方式有哪些?
优采云 发布时间: 2021-05-11 02:05在Post模型中指定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']
The
ordering属性用于指定文章的排序方法,['-created_time']指定用于对其进行排序的属性的值,此处指定要根据文章的发布时间进行排序,负号表示倒序。列表中可以有多个项目。例如,ordering = ['-created_time','title']表示首先按created_time排序,如果created_time相同,则按标题排序。这样,在指定所有返回的文章列表将按照Meta中指定的顺序自动排序之后,您可以在视图函数中删除对文章列表中返回的结果进行排序的代码。
注释模型类(Comment)也可以添加此属性。
改善跳转链接
导航栏中有一个黑白徽标。我们希望单击它以返回主页,只需修改超链接即可。打开base.html并在徽标处修改超链接:
Black & White
...
此外,导航栏中有一个主页导航按钮,我希望单击它以返回到主页。修改后的任务将作为练习提供给您(有两个地方,一个是桌面导航,另一个是移动端导航)。
当然,有一些可以改进的地方。例如,在标题文章下,有诸如分类,发布时间,作者,评论量,阅读量等信息,您可以将单击分类设置为跳到分类页面。单击阅读量即可跳至文章详细信息页面等。这些详细信息不涉及新知识,因此您可以将其作为练习让您完成。
显示正确数量的评论
有两个地方可以显示评论数量(主页文章列表和文章详细信息页面)。显示评论数量的方法非常简单。回想一下我们如何获得某篇文章文章下的评论列表?我们正在使用ment_set.all()。 all方法返回与此帖子相关的评论列表。另外,模型管理器(comment_set是特殊的模型管理器)也具有count方法,该方法返回数字,即帖子下有多少条注释。我们可以直接在模板中调用此方法:{{ment_set.count}}。用template变量替换注释数,以在文章中正确显示注释数。
跳至评论区域
有时文章的内容很长,并且注释列表的内容需要滚动很长的页面才能看到。我们可以在注释区域添加一个锚点,在显示注释数量的两个地方的超链接都指向该锚点,因此单击这两个地方将直接跳到注释列表区域,这很方便供用户快速查看评论内容。
请参阅显示注释的模板代码:
发表评论
...
我们在评论区域中为标签设置了一个ID,只需在评论链接后添加该ID的锚点即可:
blog/index.html
...
{{ post.comment_set.count }} 评论
588 阅读
blog/detail.html
{{ post.title }}
...
{{ post.comment_set.count }} 评论
588 阅读
请注意,您需要从index.html跳至注释区域,因此href超链接被指定为绝对URL,并且文章详细信息和注释区域位于同一页面上,因此您只需指定锚点。
结束了吗?
我们通过博客实际项目了解了django的基本开发技术。包括如何编写模型(Model),如何编写视图函数(View),如何使用django的内置模板系统(Template)以及如何配置路由(URL),这四个模块是django开发的核心。现在我们已经能够基本掌握这些模块的使用。
但是,还没有结束...
Django不仅提供了这些功能,我们的博客还不仅仅是这些功能。如何对博客文章进行分页?如何为博客提供RSS订阅服务?如何实现文章搜索?如果网站需要提供用户系统,如何实现用户注册和登录?如何部署到服务器,以便其他人可以通过公共网络访问?这些要求可以通过使用django的内置模块或丰富的第三方应用程序来实现。
此外,Django还具有大量第三方应用程序以提供更丰富的功能。例如,当其他人对我的文章发表评论时,如何接收通知提醒? 网站有必要为诸如新浪微博,微信等社交帐户提供登录名。这些都可以在django第三方应用程序的帮助下快速完成,而我们只需要编写少量代码。
因此,让我们继续努力,进入高级部分,继续学习更多django开发技能,并为博客提供更*敏*感*词*!
-EOF-
最后更新:2019年9月13日17:52