博客源为书写的载体,书写以对思维的缓存 正文

Django regroup分组结果存在重复的问题


博客在做归档功能时用的是Django模板标签{% regroup %}实现的,一段时间后发现存在bug:相同的分组项没有合并为一个分组,分组结果重复,下面来说说解决。

一:问题现象

Snipaste_2018-12-19_21-32-30.jpg

如图所示,同为"Python篇"却分别显示了两项,这是一件让人难受的事。

原代码为:

<div class="archive">
   {% regroup articles.object_list by types as type_list %}
   <ul class="pl-4">
       <li>类型归档
           <!-- 文章分类 -->
           <ul class="pl-4">
               {% for type in type_list %}
                   <li>{{ type.grouper }}篇 (共 {{ type.list|length }}篇)
                       <!-- 具体文章 -->
                       <ul class="pl-4">
                           {% for article in type.list %}
                               <li>
                                   {{ article.name }}
                               </li>
                           {% endfor %}
                       </ul>
                   </li>
               {% endfor %}
           </ul>
       </li>
   </ul>
</div>

网上找了找也没找到解决办法,就去官方文档那看看,结局真是让我汗颜无地。官方文档中就有上述问题的案例以及解决方法。官方文档链接:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#regroup

二:问题解决

Snipaste_2018-12-20_21-15-47.jpg

被分组的对象一定要是进行排序过的,否则{% regroup %}无法正确地进行分组。

由于我视图中"QuerySet"对象并未"order_by"过,所以我选择直接在模板中用"dictsort"过滤器进行排序。

{% regroup articles.object_list|dictsort:"types" by types as type_list %}

"dictsort"过滤器官方文档:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#dictsort

三:总结

官方文档,你值得信赖!

四:最后

1537626414381.jpeg

    • 曹达华9 2019年3月8日 10:02
    • 刚刚遇到了这个问题,多谢!官方文档确实是个好东西~
    • 鬼王达4号[博主]: 2019年3月8日 23:04
    • 我们不解决问题,我们只是官方文档的搬运工~