2015-01-29 5 views
1

На моем веб-сайте у меня есть временная шкала, где пользователь может видеть все организованные события (предстоящие и прошлые), для этого я создал модель событий, у которой есть DateTimeField, и теперь я пытаюсь для группировки результатов, чтобы отобразить их в шаблоне. Желаемый результат:Группировка событий по годам и по месяцам

- 2014 
-- January 
---- event1 
---- event2 
-- February 
---- event1 
---- event2 
.... 
- 2015 
-- January 
.... 

Моя попытка группировки по годам:

 events = {} 

     last_year = None 
     current_year_events = [] 

     for event in ProofEvent.objects.all().order_by("date"): 
      year = event.date.year 

      if year != last_year: 
       current_year_events.append(event) 
       events[year] = current_year_events 
       last_year = year 
       current_year_events = [] 
       print event.title 
      else: 
       current_year_events.append(event) 
       print event.title 

     print events 
+1

взглянуть на 'itertools.groupby' – eumiro

+0

Вы хотите сгруппировать в месяц? – laike9m

+0

Это также можно сделать в шаблоне довольно легко: https://docs.djangoproject.com/en/1.7/ref/templates/builtins/#regroup В вашем случае '{% перегруппируйте события по дате.год как годы %} ' – Wolph

ответ

3

Если вы пытаетесь группы событий только для шаблонов рендеринга, то это не является необходимым. Вы можете передать плоский список событий и использовать {% ifchanged %} тег шаблона:

{% for event in events %} 

    {% ifchanged %}<h2>{{ event.date|date:"Y" }}</h2>{% endifchanged %} 

    {% ifchanged %}<h3>{{ event.date|date:"F" }}</h3>{% endifchanged %} 

    <div>{{ event.title }}</div> 

{% endfor %} 
+0

Выход именно то, что мне нужно. За исключением того, что это event.date | дата. Я приму этот ответ, как только SO позволит мне –

+0

Упс, конечно 'event.date' :-) – catavaran

Смежные вопросы