代码之家  ›  专栏  ›  技术社区  ›  blueFast

解析django表2中的iso8601日期格式2

  •  1
  • blueFast  · 技术社区  · 7 年前

    我正在使用 django tables2 其中:

    根据 django date

    c ISO 8601格式:2008-01-02T10:30:00.000123+02:00

    我就是这么做的:

    import django_tables2 as tables
    
    ...
    
        created = tables.DateTimeColumn(format='c')
    

    但这是行不通的 created

    这是来自API的数据:

    "created": "2018-09-05T14:00:35.672433Z",
    

    实际上是从 DRF ,默认情况下使用:

    默认值与DATETIME\u FORMAT settings键相同, 除非设置为“iso-8601”

    总而言之,我的问题是:

    如何用django表2解析iso8601?

    表格填充如下所示:

    import django_tables2 as tables
    from django.utils.translation import ugettext as _
    
    
    class ExpansionTable(tables.Table):
        human = tables.Column()
        created = tables.DateTimeColumn(format='c')
        size = tables.Column()
        description = tables.Column()
        output = tables.Column()
    
        class Meta:
            attrs = {'class': 'table paleblue'}
            order_by = "-created"
    

    这将显示空值( — )对于 列。其余的列按预期显示。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jieter    7 年前

    django-tables2需要 DateTimeColumn 成为一个真正的 datetime 例如,以下是实现:

    def __init__(self, format=None, short=True, *args, **kwargs):
        if format is None:
            format = "SHORT_DATETIME_FORMAT" if short else "DATETIME_FORMAT"
        template = '{{ value|date:"%s"|default:default }}' % format
        super(DateTimeColumn, self).__init__(template_code=template, *args, **kwargs)
    

    1. 编写自定义列或使用 render_foo methods 确保数据在表中正确呈现
    2. 将字符串值转换为 日期时间 实例,然后将数据传递到django-tables2。

    我建议用2。