Hay,我的一个模型中有一个字段可以保存对象的创建日期
created_on = models.DateTimeField(blank=False, auto_now_add=True)
这可以按预期工作。
在我的模板中,我想列出像这样的对象
June 15
{{ objects here which was created on June 15 }}
June 14
{{ objects here which was created on June 14 }}
等
知道我会怎么做这个吗?
提前致谢。
答案 0 :(得分:2)
首先在视图中,确保您的对象按'created_on'字段排序。
object_list = MyObjs.objects.all().order_by('created_on')
我相信您应该可以在模板中使用以下代码:
{% regroup object_list by created_on|date:"Y-m-d" as objects_by_day %}
{% for day in objects_by_day %}
{{day.list.0.created_on|date:"M d"}}
{% for obj in day.list %}
{{obj}}
{% endfor %}
{% endfor %}
这样可以使用regroup模板标记,按日对项目进行分组,每天创建一个对象列表。使用“日期”模板过滤器输出日期本身,以重新格式化该日期列表中第一个项目的created_on字段。
[注意:我没有测试过这个!]
答案 1 :(得分:1)
这个位置在模板中,而不是视图。
您需要ifchanged
模板过滤器,您可以这样使用:
<h1>Archive for {{ year }}</h1>
{% for entry in entries %}
{% ifchanged %}<h3>{{ entry.date|date:"F" }}</h3>{% endifchanged %}
<p>{{ entry.date|date:"j" }} - {{ entry.title }}</p>
{% endfor %}
在此示例中,每次月份更改时,都会打印显示月份的标题。
ifchanged
可以执行一些相对复杂的操作(例如,检查多个变量是否都已更改),并且可以有一个可选的else
块 - 有关详情,请参阅the docs。
答案 2 :(得分:0)
例如,您可以在视图中生成从最小到最大排序的日期列表(按给定间隔按天计算),并获取此间隔中的所有对象。然后创建带有2个参数queryset和date的templatetag, 并过滤您的日期创建(或其他)的记录。