【问题标题】:Date formatting in Django templatesDjango 模板中的日期格式
【发布时间】:2010-09-07 21:51:32
【问题描述】:

我正在尝试使用|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.']

消息。我真的被这个难住了,有人可以帮忙吗?

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

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

    【讨论】:

    • 嗯,它们是模型中的DateField,我认为这会将它们强制转换为datetime.date 对象。我错了吗?
    【解决方案2】:

    这很奇怪;以下从口译员中可以正常工作。

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-10-11
        • 2016-03-23
        • 2019-01-21
        • 2015-01-15
        • 2012-05-16
        • 2019-05-29
        • 2018-05-31
        • 1970-01-01
        • 2011-12-05
        相关资源
        最近更新 更多