首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定django模板中的“如果时间小于x”?

如何确定django模板中的“如果时间小于x”?
EN

Stack Overflow用户
提问于 2014-12-17 06:58:51
回答 1查看 3K关注 0票数 4

我目前正在使用Django-Messages开发一个收件箱。现在,当我进入收件箱时,它会列出所有的消息,但是我想要做的是在页面上,在今天,昨天,上周等的时候把这些消息组织起来。我现在有一个for循环,它遍历所有消息并显示它们。我想我需要在for循环中嵌套一个if语句,可能如下所示:

代码语言:javascript
复制
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中找到当前日期:

代码语言:javascript
复制
datetime.datetime.now()

但是我怎样才能在模板中得到这个呢?我需要先在视图中这样做,然后在模板中使用变量吗?

我也觉得我试图这样做的方式可能没有那么有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-17 08:18:00

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

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

messages_tags.py的主体如下:

代码语言:javascript
复制
# 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

现在您的模板变成:

代码语言:javascript
复制
{% 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识别新的模板标记。

还请注意,您不需要签入elif,message.date超过24小时,因为如果不到24小时,将执行第一个if,甚至不会考虑elif

您还可以使用datetime识别的天或任何其他时间值来检查消息是多久前的。如果你要回溯很长一段时间,时间可能会变得很混乱。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27519905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档