9

在我的 Django 应用程序中,我从一个以字符串形式提供的 Web 服务获取时间,我在模板中使用该时间:

{{date.string}}

这为我提供了一个日期,例如:

2009-06-11 17:02:09+0000

这些显然有点难看,我想以一种很好的格式向我的用户展示它们。Django 有一个很棒的内置日期格式化程序,它完全符合我的要求:

{{ value|date:"D d M Y" }}

但是,这期望值作为日期对象而不是字符串提供。所以我不能用这个格式化它。在 StackOverflow 上搜索后,python strptime 似乎可以满足我的要求,但是对于 Python 来说还是个新手,我想知道是否有人可以想出一种更简单的方法来使用字符串获取日期格式,而不必求助于编写全新的自定义 strptime模板标签?

4

2 回答 2

11

您最好在视图代码中解析从 web 服务接收到的字符串,然后将 datetime.date(或字符串)传递给模板进行显示。Django 模板的精神是应该在那里完成很少的编码工作;它们仅用于演示,这就是为什么它们会竭尽全力阻止您编写嵌入 HTML 中的 Python 代码。

就像是:

from datetime import datetime
from django.shortcuts import render_to_response

def my_view(request):
    ws_date_as_string = ... get the webservice date
    the_date = datetime.strptime(ws_date, "%Y-%m-%d %H:%M:%S+0000")
    return render_to_response('my_template.html', {'date':the_date})

正如马修指出的那样,这会降低时区。如果您希望保留与 GMT 的偏移量,请尝试使用优秀的第三方dateutils库,它可以无缝地处理多种格式的日期解析,带时区,而无需提供像 strptime 这样的时间格式模板。

于 2009-06-12T00:14:16.440 回答
0

这不处理 Django 标签,但 strptime 代码是:

d = strptime("2009-06-11 17:02:09+0000", "%Y-%m-%d %H:%M:%S+0000")

请注意,您正在删除时区信息。

于 2009-06-12T00:14:08.720 回答