循环浏览字典列表并检索Django

时间:2018-06-25 05:57:56

标签: python arrays django dictionary

我是来自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背景,我不确定此嵌套词典是我应使用的字典还是混淆了其他列表等。

2 个答案:

答案 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]})

和模板中-与现在相比没有任何变化