从json数据创建一个类似于表的结构,表的左边有键,右边有值,并使用python-flask在html上显示



我正在尝试创建一个类似于表的结构,其中该表有两列(specs,value(,所有键都进入specs列,这些键的值进入value列。我的系统上本地存储了一个json文件。因此,目标是从json文件中获取所有内容,创建这个表结构并将其显示在我的网页上。

这是我去Specs的路线。当用户点击我的html页面中的一个按钮时,该按钮基本上会运行这个函数,它会获取主机事实,并将json数据存储在一个名为hostsfacts.json的文件中。我希望能够根据json数据创建一个如上所述的表,并将该表传递给provision.html。

@app.route('/Specs', methods=['GET', 'POST'])
def Specs():
ID = request.form["foremanId1"]
print(ID)
response10 = requests.get('https://test.com/api/hosts/{v1}/facts'.format(v1=ID), auth=('abc', 'password'), verify=False)
if response10.status_code == 200:
myDictForHostsFacts = json.loads(response10.content.decode('utf-8'))
resultForHostsFacts = json.dumps(myDictForHostsFacts)
with open("statichostsFacts.json", "w") as hostsFactsFile:
add_text1 = (resultForHostsFacts)
print(add_text1, file=hostsFactsFile)
hostsFactsFile.close()
return render_template('provision.html')

这是我的json文件:

{"total": 366, "subtotal": 1, "page": 1, "per_page": 320, "search": " host = 529", "sort": {"by": null, "order": null}, "results": {"mac7287327223": {"memory::system": null, "dmi::board": null, "disks::sdb::size_bytes": "0", "nmprimary_ipv4_dns-priority": "0", "nmprimary_ipv6_dns-priority": "0", "nmprimary_802-3-ethernet_speed": "0", "nmprimary_ipv4_route-table": "0", "nmprimary_ipv6_route-table": "0", "dmi::bios::release_date": "03/08/2022", "bios_release_date": "03/08/2022", "disks::sdb::size": "0 bytes", "partitions::/dev/loop2::size": "1.56 GiB", "partitions::/dev/mapper/live-rw::size": "1.56 GiB", "partitions::/dev/mapper/live-base::size": "1.56 GiB", "partitions::/dev/loop4::size": "1.56 GiB", "processorcount": "16", "processors::count": "16", "nmprimary_dhcp4_option_expiry": "1661435487", "partitions::/dev/loop2::size_bytes": "1677721600", "partitions::/dev/mapper/live-rw::size_bytes": "1677721600", "partitions::/dev/loop4::size_bytes": "1677721600"}}}

所以,我只想用mac7287327223{}中的内容创建一个表。我希望有这样的东西下表:

|规格|值|

|内存::system | null |


|dmi::板|null |


|磁盘::sdb::大小|0字节|


|处理器计数|16|

我很难在stackoverflow格式化这张表,所以,我把它放成这样是为了给每个人一个想法。

如果你想查看provision.html,它非常简单,因为我只想在那里显示这个表。所以,它只需要一个里面有桌子的身体标签。仅此而已。

所以,我基本上正在努力实现这一点,我一直很难弄清楚这个问题,因为我真的需要使用python。

如果可以的话,请帮帮我。如有任何帮助,我们将不胜感激。

您不需要将数据存储在.json文件中,除非您想永久保存它。

在Flask中,您可以将数据传递给render_template()函数:

if response10.status_code == 200:
myDictForHostsFacts = json.loads(response10.content.decode('utf-8'))
# ...
return render_template('provision.html', data=myDictForHostsFacts)

在HTML中,您可以使用jinja2语法访问该词典。Jinja2是一个模板工具,它基本上允许您在html文档中使用python代码

<table class="table table-dark">
<thead class="thead thead-dark">
<tr>
<!-- Your Columns HERE -->
<th class="header text-left" scope="col">Key</th>
<th class="header text-left" scope="col">Value</th>

</tr>
</thead>
<tbody id="temp-table">
{% for entry in data%}
<tr>
<td class="text-left">{{entry}}</td>
<td class="text-left">{{data[entry]}}</td>

</tr>
{% endfor %}
</tbody>
</table>

上面的HTML代码是我自己编辑的一些代码。我建议看一下jinja2的文档,它非常有用。

相关内容

最新更新