Группа Jinja2 по месяцам/годам

Я пытаюсь сгруппировать список дат/времени в Jinja по месяцам/годам. Вот код, который у меня есть прямо сейчас:

{% for group in EventsList|groupby('date') %}
        <b>{{group.grouper}}</b><br />
        {% for event in group.list %}
            <i>{{event.title}}</i>
        {% endfor %}
    {% endfor %}

Но проблема в том, что в настоящее время он группируется по определенной дате. Я хотел бы сгруппировать по месяцам/годам (например, январь 2011 г., февраль 2011 г. и т. д.).

Было бы более эффективно сделать это на Python?

Благодарность!


person iceanfire    schedule 06.10.2012    source источник


Ответы (1)


Вы можете сначала groupby('date.year'), а затем groupby('date.month').

{% for year, year_group in EventsList|groupby('date.year') %}
    {% for month, list in year_group|groupby('date.month') %}
        <b>{{ month }} {{ year }}</b><br />
        {% for event in list %}
            <i>{{event.title}}</i>
        {% endfor %}
    {% endfor %}
{% endfor %}
person Nathan Villaescusa    schedule 06.10.2012
comment
Благодарю вас! Просто интересно, можно ли отформатировать {{month}} как длинную форму (например, октябрь) вместо числа (например, 10). Я также рассматривал альтернативный подход, при котором я просто создал бы еще один столбец в хранилище данных для месяца/года в длинной форме (например, октябрь 2012 г.) ... но это было бы довольно неэффективно. - person iceanfire; 07.10.2012
comment
Вы можете использовать {{ month.strftime('%B') }}. См. docs.python.org/2/library/ - person liclac; 01.07.2013
comment
Я знаю, что это старо, но вы определенно не можете month.strftime(...), потому что месяц будет целым числом. - person Carson Evans; 25.06.2019
comment
но вы можете сделать date.strftime(...), что сработает.) - person Bastian; 18.11.2019
comment
Как выглядит объект данных для этого? - person Jesper Bylund; 21.10.2020