Django模板“for循环”无法正常工作

时间:2011-11-19 19:25:48

标签: python django dictionary

我正在尝试构建模板标签,使用settings.py中的字典来构建菜单。

我将此作为模板的一部分。

{% for menu_item in menu %}
     <li class="single-link"><a href="{{ menu_item.url }}" title="{{ menu_item.caption }}">{{ menu_item.caption }}</a></li>
{% endfor %}

传递给此标记的上下文包含

context['menu'] = {'keywords': {'url': '#', 'caption': 'test'}, 'start': {'url': '#', 'caption': 'test'}, 'flippa': {'url': '#', 'caption': 'test'}}

{{ menu.start.caption }}工作正常,但在我的for循环中,menu_item只包含'keywords''start''flippa'并使用.完全不起作用。

任何人都知道我在这里做错了吗?

免责声明:我一直只使用django和python一周!

2 个答案:

答案 0 :(得分:6)

在Django模板中,与标准Python一样,在字典上使用for只是遍历键。您需要使用.items()方法:

{% for key, value in menu.items %}
    <li class="single-link"><a href="{{ value.url }}" title="{{ value.caption }}">{{ value.caption }}</a></li>
{% endfor %}

(虽然我发现你实际上并没有在这里使用密钥,所以你可以使用for value in menu.values)。

另外,请注意,在任何情况下,字典可能都不是您项目的正确容器,因为您无法定义排序。正如armonge所说,列表可能更好。

答案 1 :(得分:1)

您需要的是让您的菜单成为列表而不是字典

context ['menu'] = [{'url':'#','caption':'test'},{'url':'#','caption':'test'},{'url ':'#','caption':'test'}]