如何在Django模板中解析“2015-01-01T00:00:00Z”?

时间:2015-12-01 04:18:44

标签: python django django-templates django-haystack solr4

在我的Django html模板中,我使用haystack以格式获取我的SOLR facet_date结果 “2015-01-01T00:00:00Z”。如何在模板中以“01/01/2015”格式解析它? 我的模板是

{{ facets.dates.created.start }}

我应该在模板中添加什么“| date:”选项? 谢谢!

3 个答案:

答案 0 :(得分:3)

如果{{ facets.dates.created.start }}是日期时间对象,则可以使用

{{ facets.dates.created.start|date:"SHORT_DATE_FORMAT" }}

如果您要提供字符串,可以创建模板过滤器以将字符串转换为datetime对象并应用date过滤器

@register.filter
def stringformat(value, args):
    return datetime.strptime(value, args)

在模板中:

{{ facets.dates.created.start|stringformat:"%Y-%m-%dT%H:%M:%SZ"|date:"SHORT_DATE_FORMAT" }}

答案 1 :(得分:2)

如果您的日期是ISO字符串而不是Python datetime.datetime,我猜您必须在视图上解析它或编写自定义过滤器:

# yourapp/templatetags/parse_iso.py
from django.template import Library
import datetime

register = Library()

@register.filter(expects_localtime=True)
def parse_iso(value):
    return datetime.datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ")

然后在模板上:

{% load parse_iso %}

{{ value|parse_iso|date:'d/m/Y'}}

[编辑]

  

收到此错误Exception Type: TemplateSyntaxError at /search/ Exception Value: 'parse_iso' is not a valid tag library: Template library parse_iso not found

确保您遵循code layout prescribed in the docs

yourapp/
    __init__.py
    models.py
    ...
    templatetags/
        __init__.py
        parse_iso.py
    views.py

您所在的国家/地区可能会使用m/d/Y01/01/2015含糊不清,我建议您使用31/01/2015这样的示例,以便第一个数字代表日期或月份,这是明确的。

答案 2 :(得分:-1)

您可以使用Django模板标签。你需要使用{{my_date | date:" some_format"}},这需要" my_date"作为参数(它应该是一个日期对象)到" date"标记,然后根据给定的格式对其进行格式化。

{{facets.dates.created.start|date:"d/m/Y"}}