2015-09-06 61 views
0
resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=lambda o: o.__dict__).encode('utf-8')) 

當我使用jinja2,並檢索日期形式MYSQL,但顯示的錯誤。 數據:AttributeError:datetime.date對象沒有屬性'__dict__'

 
2015-09-01 
2015-09-04 

如何解決? 我需要將jinja2轉換爲django嗎?

+0

當我更改類型日期以鍵入MYSQL的varchar(50)時,結果是正常的。 –

+0

你的數據包含'date'對象,你的'default'是使用一個對象的'__dict__','date'對象沒有'__dict__'。寫一個更聰明的'默認'功能。 – Eevee

+0

不,顯然,使用類型varchar是有效的,我認爲序列化是重點。因爲datetime.date不能Serializable。謝謝! –

回答

1

這與Django或Jinja2或您的Web框架無關。您的數據包含date對象,JSON沒有日期類型,因此json模塊不知道如何存儲它們。它試圖回退到default函數,該函數僅轉儲對象的所有屬性,但date類型在C中實現,並且沒有Python屬性。

您可以根據您的default擴展解決這個問題:

import datetime 

def json_default(value): 
    if isinstance(value, datetime.date): 
     return dict(year=value.year, month=value.month, day=value.day) 
    else: 
     return value.__dict__ 

resp = web.Response(body=json.dumps(r, cls=CJsonEncoder, ensure_ascii=False, default=json_default).encode('utf-8')) 

我使用.__dict__作爲一個包羅萬象的後備推薦,但 - 你的輸出可能包含私人的垃圾,你的JSON可能不會產生解碼時就像原始數據一樣。