使用 For 循环的 Django Python 模板嵌套列表

Posted

技术标签:

【中文标题】使用 For 循环的 Django Python 模板嵌套列表【英文标题】:Django Python Template Nested List using For Loop 【发布时间】:2020-05-27 12:21:11 【问题描述】:

我对 python 编程真的很陌生。请帮助我如何在我的模板中显示以下结果:

我希望在我的 Django 模板中获得的结果是以下表格视图中的示例:

Up Devices          Down Devices
Server-01           Server-02
Server-03

Total 2             Total 1

我正在使用 API 连接到服务器。以下是通过 GET 获取 API 结果的示例:


    "treesize": 10,
    "devices": [
          
            "objid": 3222,
            "objid_raw": 3222,
            "device": "Server-01",
            "status": "Up",
            ,
          
            "objid": 3291,
            "objid_raw": 3291,
            "device": "Server-02",
            "status": "Down",
        ,
          
            "objid": 3357,
            "objid_raw": 3357,
            "device": "Server-03",
            "status": "Up",
        ,
    ]

这是我的意见.py。如果这是获取我想要的信息的最佳方式,请纠正我。

response = requests.get('sample_api_url')
data = response.json()

up_devices = dict()
for device in data['devices']:
    if device['status'] == "Up":
        device_info = 
            "objid" : device['objid'],
            "device" : device['device'],
            "status" : device['status'],
        
        objid = device['objid']
        up_devices[objid] = device_info
    else:
        device_info = 
            "objid" : device['objid'],
            "device" : device['device'],
            "status" : device['status'],
        
        objid = device['objid']
        down_devices[objid] = device_info

context = 
    'treesize': data['treesize'],
    "up_devices": up_devices,


return render(request, 'monitoring/dashboard.html', context)

我的列表结果是


    3222: 'objid': 3222, 'device': 'Server-01', 'status': 'Up',
    3291: 'objid': 3291, 'device': 'Server-02', 'status': 'Up',
    3357: 'objid': 3357, 'device': 'Server-03', 'status': 'Up',

但是,我不知道如何在我的模板中解析它,我只能得到键而不是值。示例:

<table>
    % for key in up_devices %
        <tr>
            <td> up_devices </td>
            <td> up_devices.key.device </td>
        </tr>
    % endfor %
</table>

【问题讨论】:

【参考方案1】:

尝试使用 dictionary.items():

<table>
    % for key, value in up_devices.items %
        <tr>
            <td> value.device </td>
        </tr>
    % endfor %
</table>

这应该会给你设备价值。

我不确定您到底想在视图文件中完成什么,但是您可以通过将所有内容移出 if, else 子句来减少很多重复,除了更改的分配,即.

for device in data['devices']:
    device_info = 
        "objid" : device['objid'],
        "device" : device['device'],
        "status" : device['status'],
    
    objid = device['objid']
    if device['status'] == "Up":
        up_devices[objid] = device_info
    else:
        down_devices[objid] = device_info

【讨论】:

【参考方案2】:

up_devices 是字典,而不是列表。您可以使用字典对象上的items 方法同时访问字典键和值。

<table>
    % for key, value in up_devices.items %
        <tr>
            <td> key </td>
            <td> value.device </td>
        </tr>
    % endfor %
</table>

【讨论】:

以上是关于使用 For 循环的 Django Python 模板嵌套列表的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Django 模板文件的 for 循环中使用条件标签

Python Django - 模型:查询/过滤器中的 for 循环

如何优化 FOR 循环下存在的数据库调用(平台:Django、Python、Postgres)[重复]

如何在 Django 模板中使用这个 for 循环? [关闭]

Django模板中的数字for循环

如何使用 DJango 在 for 循环中使用变量