2010-09-07 273 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 %} 

如果问题是一致的,它应该在输出中得到反映。