Django: невозможно получить доступ к значениям из словаря, вложенного в другой словарь - PullRequest
0 голосов
/ 30 августа 2018

У меня есть словарь в форме

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.html или data.2.html, он работает нормально, и я могу видеть данные HTML. Однако использование data.i.html внутри цикла for ничего не печатает.

Где я иду не так?

РЕДАКТИРОВАТЬ 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 голосов
/ 31 августа 2018

FIXED

Я изменяю цикл 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 %}

Теперь я могу легко получить доступ к значениям вложенных словарей.

0 голосов
/ 30 августа 2018

При попытке выполнить итерацию по словарю возникает ошибка, ваша первая запись не является вложенным словарем, поэтому, когда вы пытаетесь выполнить итерацию, как если бы вы работали с ошибкой:

~ λ 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))

С тех пор он не будет пытаться обработать первое значение словарной записи как словарь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...