Django - Печать словаря списка списков в таблице в HTML
У меня есть словарь, состоящий из списка списков. Я хочу вывести его в структурированном виде, предпочтительно в виде таблицы.
Для каждого имени хоста я хочу, чтобы в таблице с тремя столбцами (Address Interface State ID ) были выведены определенные строки с соответствующими записями. Это кажется очень сложным вложенным циклом, если это возможно.
Вот словарь ospfdictkey, передаваемый шаблону
{'hostname': [['R1-ISP'], ['R2-ISP']], 'ospfneighboraddress': [['192.168.5.2', '192.168.5.13', '192.168.5.25'], ['192.168.5.1', '192.168.5.6', '192.168.5.32']], 'ospfneighborinterface': [['ae1.0', 'ae4.0', 'ae7.0'], ['ae1.0', 'ae2.0', 'ae9.0']], 'ospfneighborstate': [['Full', 'Full', 'Full'], ['Full', 'Full', 'Full']], 'ospfneighborID': [['172.0.0.2', '172.0.0.4', '172.0.0.5'], ['172.0.0.1', '172.0.0.3', '172.0.0.6']]}
HTML Code
{% for ip in listip %}
{% for ospfadd in ospfdictkey.ospfneighboraddress %}
{% for a in ospfadd %}
<tr>
<td>{{ a }}</td>
</tr>
{% endfor %}
{% endfor %}
{% endfor %}
Вот конечный результат, который я получаю но он повторяет данные ключей, и как мне итерировать другие ключи, чтобы вывести следующие как данные таблицы?
Хорошо, я не совсем понимаю ваш вопрос, но вот несколько советов по его рефакторингу.
- Вы должны быть конкретны с синтаксисом шаблона. Если это словарь, попробуйте использовать dict.items .
{% for key, value in dict.items %}
{{ key }}, {{ value }}
{% endfor %}
- Вы можете использовать пользовательские фильтры. Смотрите https://docs.djangoproject.com/en/4.0/howto/custom-template-tags/ для получения дополнительной информации. Написав свои собственные фильтры, вы можете использовать свой словарь по своему усмотрению, используя чистый python (либо делая что-то вроде dict['hostname'][0] для доступа к первому элементу из списка по ключу hostname в dict). Я написал это грубо, но надеюсь, что вы поняли идею, если есть вопросы, не стесняйтесь спрашивать. Кроме того, вы можете filter элементы в списке, который является значением в вашем словаре. Например:
if len(dictionary['hostname'] > 2: # if you want to get only those values which length is greater than 2
# return something
PS. попробуйте написать читабельный код в своем редакторе, а здесь задавать вопросы примерно так:
{
'hostname': [
['R1-ISP'],
['R2-ISP'],
],
'ospfneighboraddress': [
['192.168.5.2', '192.168.5.13', '192.168.5.25'],
['192.168.5.1', '192.168.5.6', '192.168.5.32'],
],
...
}