<div>
    <div>
            Lab Name : {{ lab.name }}
    </div>

    {% for node in lab.nodes %}
        {%  for p in node.processors %}
            <ul>
               <li>
                    Processor model : {{ p.model }}
                    Processor frequency : {{ p.frequency }}
               </li>
            </ul>
        {% endfor %}

        {%  for i in node.interfaces %}
            <ul>
                <li>
                    <div>

                       name : {{  i.name }}
                       MAC frequency : {{ i.mac }}
                       max speed : {{ i.max_speed }}
                       current speed : {{ i.current_speed }}
                       state : {{ i.state }}
                    </div>
                </li>
            </ul>
        {% endfor %}

        {%  for disk in node.disks %}
             <ul>
                <li>
                    <div>
                       Disk name : {{ disk.name }}
                       Size: {{ disk.size }}
                    </div>
                </li>
            </ul>
        {% endfor %}

         <ul>
                <li>
                    <div>
                        Memory total : node.memory.total
                        Memory : node.memory.maximum_capacity
                    </div>
                </li>
         </ul>
</ul>
    {% endfor %}

</div>