2010-09-07 150 views
1

我正在嘗試使用|date過濾器並遇到一些問題。這裏是輸出格式化的方式代碼:在Django模板中格式化日期

{% for the_date in event.date_set.all %} 
    <p>{{ the_date }}</p> 
{% endfor %} 

這個輸出

<p>2010-10-31</p> 
<p>2010-12-01</p> 
...etc 

當我更改代碼以

{% for the_date in event.date_set.all %} 
    <p>{{ the_date|date:"F j, Y" }}</p> 
{% endfor %} 

它只輸出:

<p></p> 
<p></p> 
...etc 

我試着改變init日期以不同的事情的IAL格式,但後來我得到一個驗證錯誤嘗試輸入的日期,並獲得了

ValidationError: [u'Enter a valid date in YYYY-MM-DD format.'] 

消息。我真的被這個難住了,誰能幫忙?

回答

3

我猜你的日期不是真正的日期,而是包含格式化日期的字符串。日期過濾器需要一個日期時間對象,而不是一個字符串。

+0

嗯,它們是模型中的一個'DateField',我認爲它會將它們強制轉換爲'datetime.date'對象。我錯了嗎? – 2010-09-08 10:41:46

+0

無視最後一個,明白了... – 2010-09-08 11:23:40

1

這很奇怪;下面的翻譯工作很好。

In [18]: from datetime import datetime 

In [19]: from django.template import Template, Context 

In [20]: t = Template('date is {{ thedate|date:"F j, Y" }}') 

In [21]: t.render(Context({'thedate': datetime.today()})) 
Out[21]: u'date is September 7, 2010' 

這可能是值得嘗試以上在你的最後嘗試和隔離問題。如果它不起作用,那麼你可能需要更新django版本或其他東西(不太可能,我承認)。

另一件事是確保你沒有錯別的地方。例如,如果你的for循環只是返回NULL或空字符串,這可能是原因。作爲一個全面的檢查,請嘗試:

{% for the_date in event.date_set.all %} 
    <p>{{ the_date }}</p> 
    <p>{{ the_date|date:"F j, Y" }}</p> 
{% endfor %} 

如果問題是一致的,它應該在輸出中得到反映。