You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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>

关键细节说明

  1. sort过滤器:先给文章按source排序,确保相同来源的文章都集中在一起,避免groupby把同一个source拆成多个分组(如果你的原数据已经按source排好序了,这步可以省略,但加上更稳妥)。
  2. groupby('source'):把列表按source字段分组,每个分组对象包含grouper(就是source的值)和list(该source下的所有文章)。
  3. 简化链接判断:用article.comments if article.comments else article.link替代原有的分支判断,让代码更紧凑。

这样修改后,就能实现你想要的效果:每个source只显示一次,下面跟着该来源的所有文章链接啦!

内容的提问来源于stack exchange,提问作者Amirtha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:42:46