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 模板从查询集更改了日期格式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用格式化的日期时间字段获取 django 查询集结果

Django 模板中的日期/时间格式

如何更改 django 日期时间格式输出?

如何更改 django 模型中的默认时间格式 [重复]

在 django 模板中格式化日期

Django“naturalday”模板过滤器:回退到格式化日期?