【问题标题】:Filter or split a list in Jinja template在 Jinja 模板中过滤或拆分列表
【发布时间】:2020-12-02 18:03:27
【问题描述】:

我正在 Python 上的 Flask 中使用 Jinja 模板,并尝试实现以下目标。

我有一个具有特定开始日期的项目(“培训”)列表。我成功地遍历了它们,并按日期排序了订单。我很想添加子标题,将长长的培训列表与子标题分开,例如“本周”、“下周”、“稍后”。你会怎么做?我也在想

  • 在 Jinja 模板中添加一些内容,以查看日期并按这些日期分组
  • 在用于训练的 python 类中添加一个方法,告诉模板它属于哪个分组(例如“本周”),但是我如何使用它来排序和添加子标题?

非常感谢! 斯科特

    {% for training in trainings|sort(attribute="starts_at") %}
        <div class="card">
          <div class="card-body">
            <h5 class="card-title">{{training.starts_at.strftime('%A, %d %b')}} - {{training.title}}</h5>

            <p class="card-text">Short description about the training</p>
            <a href="{{url_for('trainings.showSingleTraining', training_id=training.id) }}" class="btn btn-primary">See information</a>
                            
          </div>
        </div>
        
        <br />
    {% endfor %}

【问题讨论】:

    标签: python flask jinja2


    【解决方案1】:

    我觉得我找到了,您可以在 Jinja 中使用 groupby,请参见下面的示例。如果我添加一个返回自定义分组的类方法(例如:“本周”、“接下来 4 周”、“稍后”),也可以使用这个更自定义的方法

    {% for year, year_group in trainings|groupby('starts_at.year') %}
        {% for month, list in year_group|groupby('starts_at.month') %}
            <b>{{ month }} {{ year }}</b><br />
                {% for training in list %}
    
            {% endfor %}
        {% endfor %}
    {% endfor %}
    

    来源:Jinja2 Group by Month/year

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-23
      • 2016-09-27
      • 2020-06-12
      相关资源
      最近更新 更多