Wagtail CMS 2.6.1:如何将更新页子项改为逆时间顺序排列?
如何修改Wagtail中Updates页面的子项排序规则?
管理界面能否直接修改?
很遗憾,不行。Wagtail的管理后台主要负责内容编辑、页面树结构管理这类可视化操作,前端页面的子项展示排序逻辑是由代码层面(页面模型的get_context方法或模板)控制的,没有内置的管理界面选项可以直接调整这个排序规则。
最快的Python实现方式
看你贴出来的ArticleIndexPage模型代码,其实已经写好了按日期倒序的逻辑(order_by('-date'))——如果当前前端还是按字母顺序展示,大概率是你线上运行的代码里排序规则不对,或者模板做了额外排序处理。
最快的修复步骤如下:
- 打开你的
ArticleIndexPage模型文件,找到get_context方法里的children查询语句:- 如果当前是按字母排序,代码应该是这样的:
children = ArticlePage.objects.live().child_of(self).not_type(ArticleIndexPage).order_by('title') - 把它改成按发布日期逆序(最新文章优先):
children = ArticlePage.objects.live().child_of(self).not_type(ArticleIndexPage).order_by('-date')
-date依赖于你的ArticlePage模型有一个名为date的字段(用来存储文章的发布时间)。如果你的文章模型没有自定义date字段,也可以用Wagtail内置的页面发布时间字段:# 按首次发布时间逆序 children = ArticlePage.objects.live().child_of(self).not_type(ArticleIndexPage).order_by('-first_published_at') # 或者按最后更新时间逆序 children = ArticlePage.objects.live().child_of(self).not_type(ArticleIndexPage).order_by('-last_published_at') - 如果当前是按字母排序,代码应该是这样的:
- 保存代码后,重启你的Wagtail服务,前端的Updates页面子项就会自动切换为逆时间顺序展示了。
- 额外检查:确保你的模板在渲染
children列表时没有添加额外的排序过滤,比如不要用{% for child in children|dictsort:"title" %}这种写法,直接用{% for child in children %}即可。
内容的提问来源于stack exchange,提问作者Access Denied
相关产品推荐
相关产品推荐

