Django:无法访问嵌套在另一个词典中的词典中的值

时间:2018-08-30 16:13:07

标签: python html django django-templates

我有以下形式的字典项

data = {0:'Karthik',
    1:{'semester':1,'marks':100,'result':'pass','html':'HTML DATA HERE'},
    2:{'semester':2,'marks':98,'result':'pass','html':'HTML DATA HERE'},
    3:{'semester':3,'marks':99,'result':'pass','html':'HTML DATA HERE'}}

我将上述数据传递给模板,如下所示:

def showAvailableNonCBCSResults(request,usn):
    data = {0:'Karthik',
        1:{'semester':8,'marks':100,'result':'pass','html':'HTML DATA HERE'},
        2:{'semester':8,'marks':100,'result':'pass','html':'HTML DATA HERE'},
        3:{'semester':8,'marks':100,'result':'pass','html':'HTML DATA HERE'}}
    return render(request,'result/showresult.html',{'data':data,'dictentries':range(0,len(data))})

模板代码如下:

{% for i in dictentries %}
     <table class="table table-responsive table-striped table-hover pt-3" style="margin:auto;">
     {{ data.i.html }}
     </table>
{% endfor %}

未打印字典html字段中的数据。如果我用 data.1.htmldata.2.html,它工作正常,我可以看到html数据。但是,在for循环中使用data.i.html不会显示任何内容。

我要去哪里错了?

编辑1: 我在第0个索引处制作了第一个字典,其格式与其他条目相同。模板输出仍然没有变化。

data = {1:{'semester':0,'marks':100,'result':'pass','html':'HTML DATA HERE'},
        1:{'semester':1,'marks':100,'result':'pass','html':'HTML DATA HERE'},
        2:{'semester':2,'marks':98,'result':'pass','html':'HTML DATA HERE'},
        3:{'semester':3,'marks':99,'result':'pass','html':'HTML DATA HERE'}}

2 个答案:

答案 0 :(得分:0)

尝试遍历字典时遇到错误,您的第一个条目不是嵌套字典,因此当您尝试迭代时就好像遇到了错误:

~ λ python3
Python 3.7.0 (default, Jun 29 2018, 20:13:13)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> testDict = {0:"Name",1:{"nested":"dict1"},2:{"nested2":"dict"}}
>>> for k,v in testDict.items():
...     print(k,v)
...
0 Name
1 {'nested': 'dict1'}
2 {'nested2': 'dict'}
>>> for k,v in testDict.items():
...     for k2,v2 in v.items():
...             print(k2,v2)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
AttributeError: 'str' object has no attribute 'items'

这基本上是说您正在尝试将字符串当作字典,这自然是行不通的。您可能会改变

'dictentries':range(0,len(data))

'dictentries':range(1,len(data))

从那时起,它将不会尝试将第一个字典条目值视为字典。

答案 1 :(得分:0)

已修复

我如下更改模板中的for循环:

{% for k,v in data.items %}
     <table class="table table-responsive table-striped table-hover pt-3" style="margin:auto;">
     {{ v.html }}
     </table>
{% endfor %}

我现在可以轻松访问嵌套词典的值。