在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

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线