django模板只打印第一个独特的事件

时间:2015-01-27 00:05:57

标签: django django-templates

我有一个非常简单的任务,但我不知道如何在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

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

您可以使用{% ifchanged %}模板标记:

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