2011-12-30 2 views
3

필드로 정렬 된 Events 테이블이 있습니다.Django - 템플릿의 특정 필드로 쿼리 그룹화하기

내가 템플릿에서 이벤트를 인쇄 할,하지만 각 날짜에 대해 별도의 사업부를 사용하여, 예컨대 :

<div class="content"> 
    <h1>December 30th</h1> 
    <!-- div for Event 1 from December 30th --> 
    <!-- div for Event 2 from December 30th --> 
</div> 

<div class="content"> 
    <h1>December 31st</h1> 
    <!-- div for Event 1 from December 31st --> 
    <!-- div for Event 2 from December 31st --> 
    <!-- div for Event 3 from December 31st --> 
</div> 

내가 이걸 어떻게해야합니까?


현재 해결 방법은 날짜를 키로하는 사전에 Event 개체를 넣는 것입니다. 이것은 주문 문제가 있으며 비효율적이며 비효율적입니다.

보기 :

events = Event.objects.select_related().all() 

events_dict={} 
for event in events: 
    date=event.date.strftime('%d %B %Y') 
    if date in events_dict: 
     events_dict[date].append(event) 
    else: 
     events_dict[date] = [event] 

템플릿 :

{% for date, events in events_dict.items %} 
    <div class="content"> 
    <h1>{{date}}</h1> 
    {% for event in events %} 
     {% include "partials/event.html" %} 
    {% endfor %} 
    </div> 
{% endfor %} 
+2

[regroup] (https://docs.djangoproject.com/ko/1.3/ref/templates/builtins/#regroup) 태그를 사용해 보셨습니까? – demalexx

+0

@ race1 아니, 나는 그것을 찾지 못했다. 고맙습니다. 당신이 대답을 게시하면 그것을 받아 들일 테니 – bcoughlan

+0

고마워,하지만 또 다른 좋은 대답이있다. :) – demalexx

답변

8

당신은 정확하게 당신이 원하는 않는 {% regroup %} 태그를 찾고 있습니다. 일련의 항목 (사용자가 직접 주문해야 함)과 조회가 필요하며 해당 조회에 의해 순서가 그룹화됩니다.

보기 :

events = Event.objects.select_related.all() 

템플릿 :

{% regroup events by date as events_by_date %} 
{% for date in events_by_date %} 
    <div class="content"> 
    <h1>{{ date.grouper|date:"d F Y" }}</h1> 
    {% for event in date.list %} 
     {% include "partials/event.html" %} 
    {% endfor %} 
    </div> 
{% endfor %} 

(날짜 형식 문자열이 다른 것을 알; the equivalent of %B in strftime is F for the date filter을).