Django模板中的日期格式

时间:2010-09-07 21:51:32

标签: python django django-templates

我正在尝试使用|date过滤器并遇到一些问题。以下是输出未格式化方式的代码:

{% 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

我尝试将日期的初始格式更改为不同的内容,但是在尝试输入日期时出现验证错误,并获得

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

消息。我真的很难过,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

我猜你的日期不是真正的日期,而是带有格式化日期的字符串。 | date过滤器需要一个datetime对象,而不是字符串。

答案 1 :(得分: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 %}

如果问题一致,则应反映在输出中。

答案 2 :(得分:0)

它是SQLite中的一个错误。参考https://code.djangoproject.com/ticket/11851