2015-01-27 25 views
1

我有一個非常簡單的任務,但我不知道如何在django模板中最有效地執行此操作。 基本上,這就是我要完成的:django模板只打印第一個獨特的事件

Jan. 27, 2015 
    first post 
    second post 
    third post 
Jan. 28, 2015 
    another post 
    and other 
    etc 
Feb. 18, 2015 
    again 
    and again 

這可能是它的型號:

class Post(models.Model): 
    date=models.DateField() 
    name=models.CharField() 

在views.py傳球只是查詢集的帖子:

Post.objects.filter(date__gte = date.today()).order_by("date") 

而且然後在模板中使用循環:

{% for post in posts%} 
    {{post.name}} 
{% endfor %} 

如何才能打印唯一日期一次?是否可以在模板中執行此操作,還是必須在視圖中處理它?我發現類似兩歲的post

回答

0

您可以使用{% ifchanged %}模板標籤:

{% for post in posts %} 
    {% ifchanged %}<h3>{{ post.date }}</h3>{% endifchanged %} 
    <div>{{ post.name }}</div> 
{% endfor %} 
2

有一個inbuilt template tag for that - regroup

這不是完美的,但與文檔它應該讓你接近。

{% regroup posts by date as date_list %} 

<ul> 
{% for date in date_list %} 
    <li>{{ date.grouper }} 
    <ul> 
     {% for item in date.list %} 
      <li>{{ date.name }}</li> 
     {% endfor %} 
    </ul> 
    </li> 
{% endfor %} 
</ul> 
+0

很好,謝謝!我發現catavaran的答案更容易,但也要感謝你的回答!我應該考慮在之前通​​過模板構建標籤。 – Lucas03 2015-01-27 00:20:27