在Django模板中格式化日期
问题描述:
我正在尝试使用|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.']
消息。我真的被这个难住了,谁能帮忙?
答
我猜你的日期不是真正的日期,而是包含格式化日期的字符串。日期过滤器需要一个日期时间对象,而不是一个字符串。
答
这很奇怪;下面的翻译工作很好。
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 %}
如果问题是一致的,它应该在输出中得到反映。
嗯,它们是模型中的一个'DateField',我认为它会将它们强制转换为'datetime.date'对象。我错了吗? – 2010-09-08 10:41:46
无视最后一个,明白了... – 2010-09-08 11:23:40