我正在构建一个基本的云基础设施管理站点,但列出虚拟机的页面有问题。
Flask 应用程序会拉取通过各种云平台的 API 生成的列表,格式如下:
vm_list = {
'vmid': [],
'name': [],
'state': [],
'platform': []
}
该列表是通过循环 API 输出并附加每个值来填充的,如下所示:
def zip_list():
...
for node in driver.list_nodes():
vm_list["vmid"].append(node.uuid)
vm_list["name"].append(node.name)
vm_list["state"].append(node.state)
vm_list["platform"].append(driver.name)
...
myVms = zip(vm_list['name'], vm_list['vmid'], vm_list['platform'], vm_list['state'])
return myVms
我通过我的烧瓶应用程序加载它,如下所示:
@app.route('/vms/')
def vms():
myVms = {}
myVms = vm.zip_list()
return render_template('VMs.html', vm_list=myVms)
The VMs.html
页面将此数据加载到表中:
<table class="tableClass">
<tr>
<th>Name</th>
<th>id</th>
<th>Plaform</th>
<th>State</th>
</tr>
{% for row in vm_list %}
<tr>
<td>{{ row[0] }}</td>
<td>{{ row[1] }}</td>
<td>{{ row[2] }}</td>
<td>{{ row[3] }}</td>
<tr>
{% endfor %}
</table>
这工作正常,按预期加载数据。然而我的问题是每次刷新页面时,数据都会再次加载并附加到列表中,从而使表大小加倍。每次刷新都会增加整体vm_list
再次列出表。
我原以为这可以通过“无效”来解决myVms
每次调用时都会变量(即myVms = {}
)在烧瓶应用程序脚本和/或zip_list
功能,但似乎不起作用;问题仍然存在。
我也调查过烧瓶缓存看看每次重新加载时清除 Flask 的缓存是否会修复它,但似乎不会。
我想我可以更改 html 文件中的某些内容以强制每个会话仅加载一次或类似的内容,但我的前端技能还没有达到那么远。
有谁知道在这种情况下我能做什么或者我哪里出错了?任何意见是极大的赞赏。