【问题标题】:Django Templates "for loops" not working correctlyDjango 模板“for 循环”无法正常工作
【发布时间】:2012-01-02 01:20:21
【问题描述】:

我正在尝试构建模板标签,这些标签使用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 一个星期!

【问题讨论】:

    标签: python django dictionary


    【解决方案1】:

    在 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 所建议的,列表可能更好。

    【讨论】:

    • 在这种情况下我将如何使用列表?只是将上下文更改为列表而不是字典是行不通的。我不相信列表有项目或价值功能?
    • 有了一个列表,你可以遍历它:for item in menu.
    • 这不起作用,可能是因为实际上是使用 getattr 从 settings.py 检索列表?
    • 没关系,我是一个可怕的白痴。 (我只是将所有内容都放入一个列表项中)。
    【解决方案2】:

    你需要让你的菜单变成一个列表而不是字典

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

    【讨论】:

    • 感谢使用列表的建议。
    猜你喜欢
    • 1970-01-01
    • 2017-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 2020-01-30
    • 2013-06-26
    • 2016-01-01
    相关资源
    最近更新 更多