我正在使用django tables2,其中:
请注意,格式使用Django的日期模板标记语法。
根据django date,通过格式字符串'c'选择了ISO 8601:
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 table2解析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
)。其余各栏均按预期显示。
答案 0 :(得分: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)
所以我想您有两种选择:
render_foo
methods来确保数据在表格中正确呈现datetime
实例。我建议使用2。