Цикл вложенного словаря в шаблоне Django - PullRequest
1 голос
/ 20 апреля 2020

Мой контекстный словарь для моего Django шаблона выглядит примерно так:

{'key1':'1',
'key2':'2',
'key3':'3',
'key4':{'key5':{'key6':'6', 'key7':'7', 'key8':'8'}}}

Я бы хотел перебрать словарь и напечатать что-то вроде:

some ярлык = 6
какой-то ярлык = 7
какой-то ярлык = 8

Как этого добиться в моем Django шаблон?

Ответы [ 4 ]

2 голосов
/ 20 апреля 2020

Что с этим не так?

<ul>
  {% for key, value in key4.key5.items %}
  <li>{{ key }} : {{ value }}</li>
   {% endfor %}
</ul>

Примечание: вы не просили зацикливание всех ключей в контексте, только доступ к содержимому key4['key5']. если это не то, о чем вы просили, пожалуйста, ответьте на ваш вопрос, чтобы прояснить ситуацию; -)

1 голос
/ 20 апреля 2020

Я предполагаю, что вы хотите использовать для l oop в шаблоне django, чтобы сделать это, вы должны сначала передать словарь в шаблон в файле представлений, как, поэтому убедитесь, что вы добавили квадратные скобки вокруг словаря, как это:

 data = [{'key1':'1',
        'key2':'2',
        'key3':'3',
        'key4':{'key5':{'key6':'6', 'key7':'7', 'key8':'8'}}
        }]
return render(request,'name of template',{'data':data})

затем в шаблоне html:

{% for i in data%}
<p>{{i.key1}}</p>
<p>{{i.key2}}</p>
<p>{{i.key3}}</p>
<p>{{i.key4.key5.key6}}</p>
{% endfor %}

Теперь, когда вы делаете для l oop, вы можете получить доступ ко всем итерам в key4, как у меня выше когда я ставлю {{i.key4.key5.key6}} Вот документы для l oop в django шаблонах https://docs.djangoproject.com/en/3.0/ref/templates/builtins/

Я предполагаю, что это то, что вы хотите сделать.

0 голосов
/ 20 апреля 2020

Это сработало для меня:

{% for key, value in context.items %}
{% ifequal key "key4" %}
{% for k, v in value.items %}
   some label = {{ v.key6 }}
   some label = {{ v.key7 }}
   some label = {{ v.key8 }}
{% endfor %}
{% endif %}
{% endfor %}
0 голосов
/ 20 апреля 2020

Если вы хотите напечатать только то, что упомянули в вопросе, то это возможно, но если мы не знаем точную структуру словаря, то это возможно в django представлениях, а не в django шаблоне.

Вы не можете напечатать значение, которое также является словарем один за другим в django шаблоне, но вы можете сделать это в представлении django.

Проверить это сообщение нажмите здесь и внесите некоторые изменения в представления.

...