嵌套字典和Django模板

时间:2010-10-30 13:58:27

标签: django templates menu

当有字典时:

menu = {'title': 'Link1',
        'children': {'title': 'Child of Link1',
                     'children': #etc..}
        }

如何迭代它以使输出变为:

<ul>
    <li>Link1
    <ul>
        <li>Child of Link 1
            <ul>
               <li>Grandchild of Link 1
               <ul>etc..</ul>
               </li>
             </ul>
         </li>
     </ul>
     </li>
</ul>

目前我使用它,但它显然只有一个深度。

    <ul id="mainnavigation">     
    {% for k,v in admin.items %} #ContextProcessor, because this menu needs to know the current path.
            <li class="expandable"><a href="{{ v.path }}">{{ v.title }}</a>
                {% if v.children != None %}
                    <ul>
                    {% for id,child in v.children.items %}
                            <li class="expandable"><a href="{{ child.path }}">{{ child.title }}</a></li>
                    {% endfor %}
                    </ul>
                {% endif %}
            </li>
    {% endfor %}
</ul>

一种方法是手动重复每个级别的循环,但是这样的解决方案很难看,我希望有一个更干的。

2 个答案:

答案 0 :(得分:1)

您必须为此制作自定义模板标记。我会选择inclusion tag

{% for k,v in var %}
{% my_tag v.children %}
{% endfor %}

答案 1 :(得分:1)

如果您已经知道每个部分都将拥有冠军头衔每个孩子,为什么不只是做嵌套元组?然后,您可以使用内置过滤器unordered_list

所以,它是:

menu = (Link 1 (Child of Link 1 (Grandchild of Link 1 (...) )))

<ul id="mainnavigation">
  {{ menu|unordered_list }}
</ul>