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 %}

Вот конечный результат, который я получаю но он повторяет данные ключей, и как мне итерировать другие ключи, чтобы вывести следующие как данные таблицы?

Table in HTML

Хорошо, я не совсем понимаю ваш вопрос, но вот несколько советов по его рефакторингу.

  1. Вы должны быть конкретны с синтаксисом шаблона. Если это словарь, попробуйте использовать dict.items
  2. .
{% for key, value in dict.items %} 
    {{ key }}, {{ value }} 
{% endfor %}
  1. Вы можете использовать пользовательские фильтры. Смотрите 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'],
   ],
   ...
}
Вернуться на верх