2010-10-30 90 views
0

当有一本字典:嵌套的字典和Django的模板

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> 

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

回答

1

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

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

如果你已经知道,每个部分都只是将不得不标题&孩子每个,为什么不只是做嵌套元组?然后,您可以使用内置过滤器unordered_list

因此,这将会是:

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

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