Django基础:按日期和时间范围查询数据及模板中日期时间类型数据的格式化和比较
from django.shortcuts import render
from .models import Event
from django.utils.timezone import now
def events_list(request):
# 获取当前日期时间
today = now()
# 查询未来的事件,排除已经结束的事件
upcoming_events = Event.objects.filter(end__gte=today).order_by('start')
# 查询今天结束的事件
today_events = Event.objects.filter(start__lte=today, end__gte=today)
# 查询已经结束的事件
past_events = Event.objects.filter(end__lt=today).order_by('-end')
return render(request, 'events_list.html', {
'upcoming_events': upcoming_events,
'today_events': today_events,
'past_events': past_events,
})
在模板中:
<!-- 显示未来事件 -->
<h2>Upcoming Events</h2>
<ul>
{% for event in upcoming_events %}
<li>{{ event.name }} - {{ event.start|date:"SHORT_DATE_FORMAT" }}</li>
{% empty %}
<li>No upcoming events.</li>
{% endfor %}
</ul>
<!-- 显示今天的事件 -->
<h2>Events Today</h2>
<ul>
{% for event in today_events %}
<li>{{ event.name }} - {{ event.start|time:"SHORT_TIME_FORMAT" }} - {{ event.end|time:"SHORT_TIME_FORMAT" }}</li>
{% empty %}
<li>No events today.</li>
{% endfor %}
</ul>
<!-- 显示已经结束的事件 -->
<h2>Past Events</h2>
<ul>
{% for event in past_events %}
<li>{{ event.name }} - {{ event.end|date:"SHORT_DATE_FORMAT" }}</li>
{% empty %}
<li>No past events.</li>
{% endfor %}
</ul>
这个例子中,我们首先从Django中导入了必要的模块,并定义了一个视图函数events_list
,它根据日期计算出未来的事件、今天的事件和过去的事件,并将这些事件传递给模板进行渲染。在模板中,我们使用了Django模板标签来格式化日期和时间,并通过逻辑标签{% empty %}
来处理没有事件的情况。
评论已关闭