我是来自Python的Python / Django的新手,很难理解处理PHP多维数组所用的最佳方法。所以我有一个CSV文件:
name,age,phone
marta,30,12345
bob,22,33555
alice,55,1939
在我的模型中,我正在逐行读取此CSV文件。然后,我将分析代码,处理一些数据,然后将数据显示在表中。这是我的工作:
data = {}
with open(path) as f:
reader = csv.reader(f)
i = 0
for row in reader:
i += 1
data[i] = {'name': row[0], 'age': row[1], 'phone': row[2]}
这似乎起作用,它创建了一个包含所有行以及每个行的所有信息的变量。
无论好坏,我的想法是获取以下列表:
data[1] = {name: marta, age: 30, phone: 12345}
data[2] = {name: bob, age: 22, phone: 33555}
data[3] = {name: alice, age: 55, phone: 1939}
然后我进入视图,在该视图中执行以下操作:
{% for details in data %}
<tr>
<td>{{ details.name }}</td>
<td>{{ details.age }}</td>
<td>{{ details.phone }}</td>
</tr>
{% endfor %}
循环成功,我得到了所有项目,但实际值(details.XXXXX)为空。我已经尝试过:details|get_item:name
,但是给出了一个错误(VariableDoesNotExist)。由于我的PHP背景,我不确定此嵌套词典是我应使用的字典还是混淆了其他列表等。
答案 0 :(得分:1)
您将data
定义为“ data = {}
”。但这应该是一个列表:data = []
:
data = []
with open(path) as f:
reader = csv.reader(f)
for row in reader:
data.append({'name': row[0], 'age': row[1], 'phone': row[2]})
如果使用字典{% for details in data %}
,则仅返回字典键0, 1, 2, 3
,而不返回数据本身。
答案 1 :(得分:1)
以这种方式迭代dict时:
for details in data:
...
基本上,您遍历dict键(而不是值),因此您所要做的就是:
{% for key, details in data.items %}
<tr>
<td>{{ details.name }}</td>
<td>{{ details.age }}</td>
<td>{{ details.phone }}</td>
</tr>
{% endfor %}
或者您可以只使用一个列表:
data = []
with open(path) as f:
reader = csv.reader(f)
for row in reader:
data.append({'name': row[0], 'age': row[1], 'phone': row[2]})
和模板中-与现在相比没有任何变化