Для цикла в Django шаблон не обрабатывается

Я создаю словарь и передаю его моему шаблону Django:

my_dict = {'boo': {'id':'42'}, 'hi': {'id':'42'}}
t = get_template('my_site.html')
html = t.render(my_dict)
print(html)
return HttpResponse(html)

Мой шаблон Django выглядит так:

<html>
<body>
Out of Dictionary <div>
    {% for key in my_dict %}
    <span>{{ key }}</span>
    {% endfor %} 
</div>
After dictionary    
</body>
</html>

Мой вывод в браузере выглядит так: Out of Dictionary After Dictionary

HTML выглядит так:

<html>
<body>
Out of Dictionary <div>

</div>
After dictionary
</body>
</html>

Я также попробовал следующее, чтобы добиться признания диктата:

{% for key in my_dict %}
{% for key in my_dict.items %}
{% for key, value in my_dict.items %}
{% for (key, value) in my_dict.items %}

2 ответа

Решение
my_dict = {'boo': {'id':'42'}, 'hi': {'id':'42'}}
t = get_template('my_site.html')
html = t.render(my_dict)

Ваш контекст имеет два ключа, boo а также hi, Вы можете получить к ним доступ в шаблоне следующим образом:

{{ boo }}, {{ hi }}

Если вы хотите использовать mydict в шаблоне вы бы вложили этот словарь в контекстный словарь:

my_dict = {'boo': {'id':'42'}, 'hi': {'id':'42'}}
context = {'my_dict': my_dict}
t = get_template('my_site.html')
html = t.render(context)

В шаблоне вы можете сделать:

{{ my_dict }}

или же

{% for key, value in mydict.items %}
  {{ key }}: {{ value }}
{% endfor %}

Сначала вам нужно создать объект Context и передать его в функцию рендеринга. Смотрите этот пример из документации

Во-вторых, чтобы ваш код работал так, как я думаю, вы намереваетесь... вам действительно нужно добавить еще один слой поверх того, что у вас есть, чтобы вы могли ссылаться my_dict в вашем шаблоне

t.render(Context({'my_dict': {'boo': {'id':'42'}, 'hi': {'id':'42'}}}))
Другие вопросы по тегам