【问题标题】:Parse ISO 8601 date format in django tables2在 django tables2 中解析 ISO 8601 日期格式
【发布时间】:2019-02-11 07:53:12
【问题描述】:

我正在使用django tables2

请注意,格式使用 Django 的日期模板标记语法。

根据django date ISO 8601 选择格式字符串'c':

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,默认使用:

format - 表示输出格式的字符串。如果没有指定, 这默认为与 DATETIME_FORMAT 设置键相同的值, 除非设置,否则将是“iso-8601”

总结一下,我的问题是:

如何用django tables2解析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"

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

【问题讨论】:

  • 你是如何填充表格中的数据的?
  • @BurhanKhalid 如前所述,数据来自 API,而不是来自表。是的,数据就在那里。实际上,如果我不使用DateTimeColumn 而只是使用Column,则会使用纯文本小部件显示信息。
  • 请使用您用于使用来自 API 的数据填充表格的代码更新问题。
  • @BurhanKhalid 已更新。
  • 有时后缀“Z”会导致问题。只是为了检查,尝试用“+00:00”替换它。

标签: python django datetime iso8601 django-tables2


【解决方案1】:

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 之前,将字符串值转换为 datetime 实例。

我建议使用 2。

【讨论】:

    猜你喜欢
    • 2021-12-15
    • 2013-05-14
    • 2011-06-17
    相关资源
    最近更新 更多