在Django中将嵌套简单类型的Python对象渲染为HTML

1 投票
1 回答
1486 浏览
提问于 2025-04-18 01:06

将Python对象转换为HTML(表格或框架)以在Django中渲染

有没有什么建议可以帮助我遍历一个任意的Python对象属性并将其渲染为HTML?不需要调用任何方法。这个对象会包含:字符串整数日期时间、这些类型的列表,以及其他类似的Python对象(虽然是不同的类,但仍然是字符串整数日期时间列表等)。这个对象的嵌套层级可能会有5到6层。

我想将其渲染为HTML(可以是表格、框架等),并在HTML中设置类/class和ID/id,以便将来使用CSS(在这个问题中不需要深入讨论CSS)。这里有一个简化的示例Python对象:

name    : Mr sandman
addr    :
        street 1: 123 main st
        street 2: None
        city    : Los angeles
        state   : ca
        zip     : 90001

events :[
        date_of_birth : datetime(2013, 01, 01) ,
        date_of_grad  : None
        ]
is_married : False
has_children : None
awards:[
        (award:
            name   : bravery
            date   : datetime(2010,01,01)), 
        (award:
            name   : courage
            date   : None ),
        ]

另外,将类似的JSON渲染为HTML也会很有帮助。

1 个回答

2

最简单的方法是先把你的Python对象转换成JSON格式。然后再用很多可用的JSON转HTML的工具之一来转换。

例如,你可以查看这个链接:https://github.com/bloopletech/json2html/tree/master

这里有个示例:http://json.bloople.net/#_output

因为你的Python对象里包含了日期时间类型,所以在解码JSON之前,需要先对解码器进行一些扩展。

import json
def extend_json(obj):
    if isinstance(obj, date):
        return str(obj)
    elif isinstance(obj, datetime):
        return obj.strftime("%Y-%m-%d %H:%M:%S")
    elif isinstance(obj, Decimal):
        return float(obj)

data = json.dumps(obj, indent=4, sort_keys=True, default=extend_json)

撰写回答