gpt4 book ai didi

django - 如何确定 django 模板中的 "if time is less than x"?

转载 作者:行者123 更新时间:2023-12-01 02:13:09 25 4
gpt4 key购买 nike

我目前正在使用 Django-Messages 处理收件箱。现在,当我进入收件箱时,它会列出所有消息,但我要做的是将消息组织到页面上的块中,到今天、昨天、上周等。我目前有一个 for 循环,它遍历所有消息并显示它们。我想我需要在 for 循环中嵌套一个 if 语句,可能像这样:

Inbox | Received Today
{% if message.date - current.date < 24 hours %}
Sent by: {{ message.sender }}
{{ message.body }}
{% elif message.date - current.date > 24 hours and message.date - current.date < 48 hours %}
Sent by: {{ message.sender }}
{{ message.body }

{% endif %}

我的问题是“current.date”该放什么?我知道我可以通过执行以下操作在 python 中找到当前日期:
datetime.datetime.now()

但是我怎样才能在模板中得到这个?我是否需要先在 View 中执行此操作,然后在模板中使用变量?

我也觉得我尝试这样做的方式可能不是那么有效?

最佳答案

我会创建一个模板过滤器以在模板中使用。

在您的应用程序目录中创建一个名为 templatetags 的目录,然后在该目录中创建一个名为 messages_tags.py 的文件(你可以随意命名)

正文messages_tags.py应该如下:

# Use datetime if not localizing timezones
import datetime
# Otherwise use timezone
from django.utils import timezone

from django import template

register = template.Library()

@register.filter
def hours_ago(time, hours):
return time + datetime.timedelta(hours=hours) < datetime.datetime.now() # or timezone.now() if your time is offset-aware

现在您的模板变为:
{% load messages_tags %}

Inbox | Received Today
{% if message.date|hours_ago:24 %}
Sent by: {{ message.sender }}
{{ message.body }}
{% elif message.date|hours_ago:48 %}
Sent by: {{ message.sender }}
{{ message.body }

{% endif %}

您可能需要手动重新启动服务器,以便 django 识别新的模板标签。

另请注意,您不需要检查 message.date 超过 24 小时的 elif,因为如果它少于 24 小时,则第一个 if将被执行并且 elif甚至不会被考虑。

您还可以使用日期或 datetime 识别的任何其他时间值来检查消息是多长时间以前的。如果您长时间查看,时间可能会变得困惑。

关于django - 如何确定 django 模板中的 "if time is less than x"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27519905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com