django 模板仅打印第一次唯一出现
django template print only first unique occurance
我有一个非常简单的任务要做,但我不知道如何在 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 循环将其打印出来:
{% for post in posts%}
{{post.name}}
{% endfor %}
如何只打印一次唯一日期?是否可以在模板中执行此操作,还是我必须在视图中处理它?我发现类似的两岁 post.
有个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>
您可以使用 {% ifchanged %} 模板标签:
{% for post in posts %}
{% ifchanged %}<h3>{{ post.date }}</h3>{% endifchanged %}
<div>{{ post.name }}</div>
{% endfor %}
我有一个非常简单的任务要做,但我不知道如何在 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 循环将其打印出来:
{% for post in posts%}
{{post.name}}
{% endfor %}
如何只打印一次唯一日期?是否可以在模板中执行此操作,还是我必须在视图中处理它?我发现类似的两岁 post.
有个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>
您可以使用 {% ifchanged %} 模板标签:
{% for post in posts %}
{% ifchanged %}<h3>{{ post.date }}</h3>{% endifchanged %}
<div>{{ post.name }}</div>
{% endfor %}