停止烧瓶复制加载的变量
我正在构建一个基本的云基础架构管理站点,并且列出虚拟机的页面有问题。
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
列表再次添加到表中。
我以为可以通过myVms
每次myVms =
{}
在flask应用程序脚本和/或zip_list
函数中调用变量(即)来“清空”变量来解决此问题,但这似乎不起作用。问题仍然存在。
我还查看了烧瓶缓存,以查看每次重新加载时清除烧瓶的缓存是否可以解决该问题,但似乎无法解决。
我在想,我可以更改html文件中的某些内容,以强制每次会话仅加载一次或类似的内容,但是我的前端技能却作用不大。
有谁知道在这种情况下或者在哪里出问题的时候我能做什么?任何意见是极大的赞赏。
-
您很接近-每次实际需要重置的变量不是
myVms
butvm_list
,如下所示:class Node: counter = 0 def __init__(self): c_str = str(Node.counter) self.uuid = "asdf" + c_str self.name = "test " + c_str self.state = "wow " + c_str + " such state" Node.counter += 1 class Driver: def __init__(self, number_of_nodes): self.nodes = [] for x in range(number_of_nodes): self.nodes.append(Node()) self.name = "the greatest driver" def list_nodes(self) -> list: return self.nodes driver = Driver(10) def zip_list(): vm_list = {'vmid': [], 'name': [], 'state': [], 'platform': []} 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 print("First time:") my_list = zip_list() for i in my_list: print(i) print("Second time:") my_list = zip_list() for i in my_list: print(i)
如果您
vm_list
在zip_list()
函数之外进行初始化,则会看到正在经历的翻倍。