如何在Flask中使用Jinja2对指定值进行分组展示?
解决重复显示Source的简洁方案
这问题用Jinja2内置的groupby过滤器就能轻松搞定,完全不用写冗余的布尔标志变量,代码会清爽很多!
核心思路
我们可以先把文章列表按source字段分组,这样相同来源的文章会被归为一组。之后只需要先遍历每个分组,显示一次该组的source标题,再遍历组内的所有文章展示对应的链接即可。
修改后的模板代码
<div class="ui small feed"> {% for group in articles|sort(attribute='source')|groupby('source') %} <h4 class="ui header">{{ group.grouper }}</h4> {% for article in group.list %} <div class="event"> <div class="content"> <div class="summary"> <a href="{{ article.comments if article.comments else article.link }}"> {{ article.title }} </a> </div> </div> </div> {% endfor %} {% endfor %} </div>
关键细节说明
sort过滤器:先给文章按source排序,确保相同来源的文章都集中在一起,避免groupby把同一个source拆成多个分组(如果你的原数据已经按source排好序了,这步可以省略,但加上更稳妥)。groupby('source'):把列表按source字段分组,每个分组对象包含grouper(就是source的值)和list(该source下的所有文章)。- 简化链接判断:用
article.comments if article.comments else article.link替代原有的分支判断,让代码更紧凑。
这样修改后,就能实现你想要的效果:每个source只显示一次,下面跟着该来源的所有文章链接啦!
内容的提问来源于stack exchange,提问作者Amirtha
相关产品推荐
相关产品推荐

