Почему при обходе одного словаря в django не получается получить значения из другого словаря, по ключу из первого?

Рейтинг: 2Ответов: 1Опубликовано: 28.02.2023

Есть два словаря:

print(dict_of_photos)
print(dict_of_facility_name)

Например их значения:

{1: [<FacilityPhoto: 2>, <FacilityPhoto: 30>, <FacilityPhoto: 31>, <FacilityPhoto: 32>], 4: [<FacilityPhoto: 21>, <FacilityPhoto: 17>, <FacilityPhoto: 22>, <FacilityPhoto: 20>, <FacilityPhoto: 25>, <FacilityPhoto: 19>, <FacilityPhoto: 15>], 15: [<FacilityPhoto: 24>, <FacilityPhoto: 13>], 16: [<FacilityPhoto: 7>, <FacilityPhoto: 8>, <FacilityPhoto: 9>, <FacilityPhoto: 10>, <FacilityPhoto: 11>, <FacilityPhoto: 12>, <FacilityPhoto: 26>, <FacilityPhoto: 28>, <FacilityPhoto: 14>, <FacilityPhoto: 16>, <FacilityPhoto: 18>, <FacilityPhoto: 27>, <FacilityPhoto: 23>, <FacilityPhoto: 4>, <FacilityPhoto: 3>, <FacilityPhoto: 5>]}
------------
{1: 'зона приемки груза', 2: 'зона погрузки/выгрузки', 3: 'зона транзита', 4: 'зона выдачи', 5: 'зона комплектации', 6: 'зона изготовления ДО/зона переработки ВДО', 7: 'зона хранения негабарита', 8: 'зона хранения неопозананного груза', 9: 'зона хранения невостребованного груза', 10: 'зона хранения  упаковки и ТМЦ', 11: 'зона хранения поддонов/крышек/колец/дерева', 12: 'зона хранения ТСД/смартфонов', 13: 'зона ремонта/изготовления ПБ, поддонов, крышек ', 14: 'зона ГСМ/зарядок для электротележек/погрузчиков ', 15: 'схема склада', 16: 'общее фото склада'}

Я их передаю из views в шаблон и там их обрабатываю

{% for key, value in dict_of_photos.items %}
     <h4>{{ dict_of_facility_name.key }}</h4>
     ...

Ну и, например, при первом обходе словаря dict_of_photos значение key = 1, следовательно конструкция {{ dict_of_facility_name.key }} должна отобразить "зона приемки груза", но ничего не происходит. При той же логике в файле питона всё работает

Ответы

▲ 2Принят

В случае со словарем, получается что в шаблоне ты обращаешься к элементу dict_of_facility_nameх["key"]

Чтобы достичь нужного тебе эффекта придется написать собственный фильтр, как например указано тут https://stackoverflow.com/a/8000078/7186864 (там же расписано про точку в шаблоне)

либо в твоем случае можно передавать в контекст не два отдельных словаря, один объединенный словарь, вида {ind: {"photos": photos, "name": facility_name] } и затем при итерации по этому словарю в шаблоне - выводить value.photos или value.name в зависимости от того, что тебе нужно