【问题标题】:How to parse "2015-01-01T00:00:00Z" in Django Template?如何在 Django 模板中解析“2015-01-01T00:00:00Z”?
【发布时间】:2015-12-01 04:18:43
【问题描述】:

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

{{ facets.dates.created.start }}

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

【问题讨论】:

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


    【解决方案1】:

    如果您的日期是 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 之类的示例,以便清楚第一个数字是代表日还是月)。

    【讨论】:

    • 收到此错误Exception Type: TemplateSyntaxError at /search/ Exception Value: 'parse_iso' is not a valid tag library: Template library parse_iso not found
    • 请遵循 Django 文档中描述的目录layout:确保templatetags 是您应用程序中的一个python 模块,其中包含一个名为__init__.py(可能为空)和parse_iso.py 的文件。
    【解决方案2】:

    如果{{ facets.dates.created.start }} 是一个日期时间对象,那么你可以使用

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

    如果您提供一个字符串,您可以创建一个模板过滤器将字符串转换为日期时间对象并应用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" }}
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 我试过这个,但不起作用。当我只做{{ facets.dates.created.star }} 时,将显示 2015-01-01T00:00:00Z。但是当我添加date:"d/m/Y" 时,加载模板时什么都没有显示。
      • 请附上一些文字,解释为什么您认为这可能会解决 OP 的问题。帮助他人理解。
      猜你喜欢
      • 1970-01-01
      • 2017-02-19
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多