django模板从queryset更改了日期格式

时间:2013-04-04 18:56:48

标签: django django-templates django-queryset

我创建了一个查询集:

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。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

你应该使用:

{{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的一部分。如果要在视图中设置日期格式,它们很有用。