2009-06-12 48 views
8

提供的字符串在我的Django應用程序格式化日期的時候,我得到的時間從一個Web服務,以字符串形式提供,我在我的模板中使用:在Django

{{date.string}} 

這爲我提供了一個日期,例如:

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

這些顯然有點難看,我想以一種很好的格式向我的用戶展示它們。 Django的具有內置的日期格式很大,這將做的正是我想要的東西:

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

然而,這要求此值被設置爲一個日期對象,而不是字符串。所以我不能用這個格式化它。在這裏搜索StackOverflow後pythons strptime似乎做我想做的事情,但對Python來說是相當新的我想知道是否有人可以想出一個更簡單的方法來獲取日期格式使用字符串,而不必訴諸寫一個全新的自定義strptime模板標籤?

回答

10

您可能最好在解析從視圖代碼中的webservice接收到的字符串,然後將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這樣的時間格式模板。

+5

+1在視圖中保留數據處理,而不是模板。 – krubo 2009-06-12 01:50:38

0

這不處理Django的標籤,但strptime代碼:

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

需要注意的是你丟棄的時區信息。