我正在构建一个基本的云基础设施管理站点,但在列出虚拟机的页面上遇到了问题。你知道吗
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)
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
列表再次添加到表中。你知道吗
我原以为每次在flask应用程序脚本和/或zip_list
函数中调用myVms
变量(即myVms = {}
)时,都可以通过“置零”来解决这个问题,但这似乎不起作用;问题仍然存在。你知道吗
我还查看了flask-caching,以查看每次重新加载时清除flask的缓存是否可以修复它,但似乎没有。你知道吗
我在想,我可以改变html文件中的一些内容,强制每个会话只加载一次或类似的内容,但我的前端技能并没有发挥那么大的作用。你知道吗
有没有人知道我在这种情况下能做些什么,或者我哪里出错了?任何建议都非常感谢。你知道吗
很接近-每次实际需要重置的变量不是
myVms
,而是vm_list
,如下所示:如果您在
zip_list()
函数之外初始化vm_list
,您将看到您正在经历的加倍。你知道吗您需要用空的
dict
初始化vm_list
。如果存在一个键,则将其追加到其列表中,否则将dict[key]
设置为空列表。这是由setdefault
完成的。你知道吗试试这个:
相关问题 更多 >
编程相关推荐