2012-11-10 54 views
0

我從twitter獲取推文。在模板推文循環中,我嘗試打印多久之前發佈的推文。所以這是我的嘗試:Django模板錯誤:'unicode'對象沒有屬性'year'

<li class="twitter-feed-block-content"> 
    {{ tweet.text }} 
    <span class="when"> 
    {{ tweet.created_at|timesince }} 
    </span> 
</li> 

{{tweet.text}}正確打印。然而,當我添加的下一行{{ tweet.created_at|timesince }}我得到以下錯誤:

Exception Value:  'unicode' object has no attribute 'year' Exception 
Location: REMOVED_BY_ME/lib/python2.7/site-packages/django/utils/timesince.py 
in timesince, line 29 Python 
Executable: REMOVED_BY_ME/bin/python 
Python Version: 2.7.2 

tweet.created_at是一個字符串。這是原因嗎?如果是這樣,我如何轉換它,以便它可以與timesince過濾器無縫工作?

在此先感謝

回答

1

好將它轉換成一個DateTime對象,這是多麼我已經解決了這個問題。正如我所說的,我想創建自定義過濾器作爲最後的手段。

所以,我創建了一個名爲strtotimesince的過濾器。如果有人面臨類似的問題,我會把它放在這裏。

from django.utils import timesince 

@register.filter(name='strtotimesince') 
def strtotimesince(value,format=None): 
    if not value: 
     return u'' 

    if not format: 
     format = "%a %b %d %H:%M:%S +0000 %Y" 
    try: 
     convert_to_datetime = datetime.strptime(value, format) 
     if convert_to_datetime: 
      return "%s ago" % timesince.timesince(convert_to_datetime) 
    except: 
     return '' 
+0

嗨,謝謝你的這個片段。爲了讓你知道,我已經在[arrow](http://crsmithdev.com/arrow/)的自己的項目中使用了它。不再需要那種討厭的格式了。 – LaundroMat

3

使用python strptime

datetime_obj = datetime.strptime("2012-10-11", "%Y-%m-%d") 
+0

我不認爲我可以在模板中做到這一點!我可以嗎? – HungryCoder

+0

不,您需要在查看代碼 –

+0

中執行此操作,我知道我可以在視圖中執行此操作。但我想用模板來完成它。我不想迭代視圖中的推文。請告訴我「視圖」和「自定義過濾器」以外的其他選擇。這兩件事是我想要做的最後一件事。 – HungryCoder

相關問題