如何在Django模板中格式化日期时间?

81

那个:

{{ wpis.entry.lastChangeDate|date:"D d M Y" }}

给我(为什么?):

2009-07-24 21:45:38.986156 

我不知道如何跳过小数部分...

在我的模型中,我有:

addedDate = models.DateTimeField(default=datetime.now)

当然有,这里是所有行 <li>{{ wpis.entry.UserID.username }} @ [{{ wpis.entry.lastChangeDate|date:"D d M Y" }}]</li> - IProblemFactory
3
奇怪,这对我有效。你确定你的lastChangeDate是Django DateTime吗? - freiksenet
1
这是针对添加日期而不是最后更改日期的,这就是我感到疑惑的原因。 - freiksenet
5个回答

232

这正是你想要的。尝试这样做:

{{ wpis.entry.lastChangeDate|date:'Y-m-d H:i' }}

59
所有可用格式选项的详细信息可以在 Django 文档中找到:https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date - Vladimir Kroz

10
你可以使用以下代码:

addedDate = datetime.now().replace(microsecond=0)

它可以用于获取当前时间并去除微秒。

5
我怀疑wpis.entry.lastChangeDate在到达模板之前在视图中被转换为字符串。
为了验证这个假设,您可以在视图中检查它是否具有一些仅字符串具有的属性/方法,例如wpis.entry.lastChangeDate.upper,然后查看模板是否崩溃。
您还可以创建自己的自定义过滤器,并将其用于调试目的,让它检查对象,并将检查结果写入页面或控制台。它将能够检查对象并检查它是否真的是DateTimeField。
另外,为什么不使用models.DateTimeField(auto_now_add=True)在创建时设置日期时间呢?

3

这也正确地支持语言和本地化。 - Tim Tisdall

2
除了其他答案之外,下面的time过滤器只能显示格式化的时间:
{{ wpis.entry.lastChangeDate|time:'H:i' }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接