django 模板从查询集更改了日期格式
Posted
技术标签:
【中文标题】django 模板从查询集更改了日期格式【英文标题】:django template changed date format from queryset 【发布时间】:2013-03-27 00:20:28 【问题描述】:我创建了一个查询集:
my_data = My_User.objects.filter(Q(first_name = 'John') |
Q(last_name = 'Doe'))
现在my_data
中的字段之一具有日期 (type: datetime.datetime
)
db 中此日期字段的格式为 yyyy-mm-dd HH:MM:SS 例如:2013-04-01 12:50:58
但是当我通过 django 模板显示此信息时,默认情况下日期格式会更改! 显示时间:2013 年 4 月 1 日下午 12:50
模板中的代码:
% for each_user in my_data %
<tr>
<td>each_user.timestamp</td>
<td>each_user.first_name</td>
<td>each_user.last_name</td>
<td>each_user.address</td>
</tr>
% endfor %
我希望日期格式为:mm-dd-yyyy HH:MM:SS AM/PM。 有什么建议吗?
【问题讨论】:
【参考方案1】:django 模板的默认日期格式为:
'N j, Y' (e.g. Feb. 4, 2003)
因此,您会从数据库中看到不同的日期格式。
你可以阅读更多关于这个here
您可以使用内置日期过滤器格式化日期:
each_user.timestamp|date:"%d/%m/%y %H:%M"
您可以将"%d/%m/%y %H:%M"
替换为您希望的任何格式。
"%d/%m/%y %H:%M"
为您提供"21/11/06 16:30"
的格式
更多信息:here
【讨论】:
好的,当我尝试 each_user.timestamp|date:"%d/%m/%y %H:%M" 时,输出真的很奇怪!像这样:“%20/%03/%13 %12:%Mar”。但我最终使用 each_user.timestamp|date:"SHORT_DATETIME_FORMAT" 它对我有用。感谢您的回复和链接:)【参考方案2】:你应该只使用:
each_user.timestamp|date:"m-d-Y h:i:s A"
这些在第一个答案的第二个链接中,“内置 Django 模板过滤器以格式化日期”。您需要的说明如下:
m Month, 2 digits with leading zeros. '01' to '12'
d Day of the month, 2 digits with leading zeros. '01' to '31'
Y Year, 4 digits. '1999'
h Hour, 12-hour format. '01' to '12'
i Minutes. '00' to '59'
s Seconds, 2 digits with leading zeros. '00' to '59'
A 'AM' or 'PM'. 'AM'
但请注意,传递给模板的数据必须是 datetime
的对象。由于序列化程序,我曾经遇到过这个问题;这些值作为字符串传递,而不是datetime
,因此无法解析;我只看到空字符串,而不是格式化字符串。
但是,接受的答案建议的第一部分用于datetime.datetime.strf(p)time
;带有%
的字符串用于解析或格式化日期。它们是 python 的一部分,而不是 Django 的一部分。如果您想在视图中格式化日期,它们很有用。
【讨论】:
以上是关于django 模板从查询集更改了日期格式的主要内容,如果未能解决你的问题,请参考以下文章