根据Django Template

时间:2017-10-26 10:15:41

标签: python django django-templates django-views

我正在构建对象列表的时间轴。该模型的布局如下:

class Note(models.Model):

    added_by = models.ForeignKey(User)
    context = models.TextField()
    timestamp_added = models.DateTimeField(auto_now_add=True)

我打算用它来创建一个时间轴,通过以下内容:

notes = Note.objects.all()

但是,为了让事情变得更清洁,我想为每个日期添加一个标题,然后显示该日期的所有事件。

我认为如下:

    <ul class="timeline">
        <!-- timeline time label -->
    {% for note in notes %}

        {% if note.timestamp_added is first %}
        <li class="time-label">
            <span class="bg-red">
                {{note.timestamp_added|date:"D m, Y" }}
            </span>
        </li>
        {% endif %}

        <li>

            <i class="fa fa-envelope bg-blue"></i>
            <div class="timeline-item">
                <span class="time"><i class="fa fa-clock-o"></i> {{note.timestamp_added}}</span>
                <h3 class="timeline-header"><a href="#">{{note.added_by}}</a> added note</h3>
                <div class="timeline-body">
                    {{note.context}}
                </div>
            </div>
        </li>

    {% endfor %}

    </ul>

但是,有没有一种合适的方法可以根据日期的第一个实例在这里写一个if语句?

1 个答案:

答案 0 :(得分:1)

您正在寻找ifchanged模板标记。

{% ifchanged %}
<li class="time-label">
    <span class="bg-red">
        {{note.timestamp_added|date:"D m, Y" }}
    </span>
</li>
{% endif %}

您可能希望按日期对您的查询集进行排序,以确保它们的顺序正确无误:

notes = Note.objects.order_by('timestamp_added')