代码之家  ›  专栏  ›  技术社区  ›  dotty

django datetimefield按天列出记录

  •  0
  • dotty  · 技术社区  · 15 年前

    我的一个模型中有一个字段,它保存了一个对象的创建日期。

    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 }}
    

    知道我该怎么做吗?

    提前谢谢。

    3 回复  |  直到 15 年前
        1
  •  2
  •   msanders    15 年前

    首先,在视图中,确保您的对象是按“已创建”字段排序的。

    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 模板标记,按天分组项目,每天创建对象列表。通过使用“日期”模板过滤器重新格式化该日期列表中第一个项目的“创建日期”字段,可以输出日期本身。

    [注:我还没有测试过这个!]

        2
  •  1
  •   Dominic Rodger    15 年前

    它的位置在模板中,而不是视图中。

    你想要 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 %}
    

    在本例中,每次月份更改时,都会打印显示月份的标题。

    改变的 可以做一些相对复杂的事情(例如,检查多个变量是否都发生了变化),并且可以有一个可选的 else 块-见 the docs 更多。

        3
  •  0
  •   Saff    15 年前

    例如,您可以在视图中按从最小到最大的顺序生成日期列表(按给定间隔的天数),并获取此间隔中的所有对象。然后创建模板tag,它接受2个参数queryset和date, 并按日期筛选已创建(或其他内容)的记录。