2011-12-30 16 views
3

私はテーブルEventsを持っていて、フィールドはdateです。Django - テンプレート内の特定のフィールドによるクエリーセットのグループ化

私はテンプレートでイベントをプリントアウトしたいのですが、日付ごと別々のdivを使用して、例えば:

<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/ja/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)。

関連する問題